In this notebook we conduct exploratory factor analyses (EFAs) on the datasets for our studies of concepts of mental life, in which each participants judged the various mental capacities of a particular target entity. We analyze datasets for adults and children from each of our five field sites: the US, Ghana, Thailand, China, and Vanuatu.

This notebook contains the results presented in the main text, in which we use Pearson correlations with our three-point response scale (no = 0, kinda = 0.5, yes = 1); see supplemental analyses for a version of these analyses treating kinda = yes = 1 and using tetrachoric correlations.

Adults

Samples

  country   n
       US 127
    Ghana 150
 Thailand 150
    China 136
  Vanuatu 148
    Total 711

Scale use

Factor retention: parallel analysis

Exploratory factor analysis

Factor loadings

Congruence

Bootstrapped congruence

Figure 3

Figure S2

Figure S3

Figure S4

Figure S5

Children

Samples

  country   n
       US 117
    Ghana 150
 Thailand 152
    China 131
  Vanuatu 143
    Total 693

Scale use

Factor retention: parallel analysis

Exploratory factor analysis

Factor loadings

Congruence

See All samples, below.

Bootstrapped congruence

Figure 4

All samples

Congruence

Figure 2

Jaccard Similarity

Figure S1

Developmental comparisons

Figures S6-S10

Figure 1, version 1

Figure 1, version 2 (included in main text)

Variance accounted for

Interfactor correlations

US ADULTS
          F1        F2        F3
F1 1.0000000 0.5114648 0.4805622
F2 0.5114648 1.0000000 0.5376676
F3 0.4805622 0.5376676 1.0000000

US CHILDREN
          F1        F2        F3
F1 1.0000000 0.3031865 0.4334098
F2 0.3031865 1.0000000 0.4856172
F3 0.4334098 0.4856172 1.0000000
GHANA ADULTS
          F1        F2        F3
F1 1.0000000 0.2725881 0.3444798
F2 0.2725881 1.0000000 0.2558207
F3 0.3444798 0.2558207 1.0000000

GHANA CHILDREN
          F1        F2        F3
F1 1.0000000 0.5790820 0.1747165
F2 0.5790820 1.0000000 0.3854114
F3 0.1747165 0.3854114 1.0000000
THAILAND ADULTS
          F1        F2        F3
F1 1.0000000 0.4142881 0.3218404
F2 0.4142881 1.0000000 0.4161488
F3 0.3218404 0.4161488 1.0000000

THAILAND CHILDREN
             F1         F2        F3           F4
F1  1.000000000 0.54189979 0.1468730 -0.008909088
F2  0.541899792 1.00000000 0.3169020  0.092978779
F3  0.146873030 0.31690205 1.0000000  0.269117295
F4 -0.008909088 0.09297878 0.2691173  1.000000000
CHINA ADULTS
          F1        F2        F3
F1 1.0000000 0.4590388 0.6187141
F2 0.4590388 1.0000000 0.3703614
F3 0.6187141 0.3703614 1.0000000

CHINA CHILDREN
          F1         F2        F3         F4
F1 1.0000000 0.51249526 0.3245885 0.25786749
F2 0.5124953 1.00000000 0.1524842 0.07635739
F3 0.3245885 0.15248416 1.0000000 0.13450834
F4 0.2578675 0.07635739 0.1345083 1.00000000
VANUATU ADULTS
         F1       F2
F1 1.000000 0.687325
F2 0.687325 1.000000

VANUATU CHILDREN
          F1        F2        F3
F1 1.0000000 0.3116574 0.5189923
F2 0.3116574 1.0000000 0.3362370
F3 0.5189923 0.3362370 1.0000000
LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgbWVudGFsIGxpZmUgYWNyb3NzIGN1bHR1cmVzOiBQcmltYXJ5IGFuYWx5c2lzIgpzdWJ0aXRsZTogIkV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyB1c2luZyBmdWxsIGRhdGFzZXRzLCBQZWFyc29uIGNvcnJlbGF0aW9ucywgYW5kIG9ibGlxdWUgdHJhbnNmb3JtYXRpb25zIgphdXRob3JzOiAiKipLYXJhIFdlaXNtYW4qKiwgQ3Jpc3RpbmUgSC4gTGVnYXJlLCBSYWNoZWwgRS4gU21pdGgsIFZpdmlhbiBBLiBEem9rb3RvLCBGZWxpY2l0eSBBdWxpbm8sIEVtaWx5IE5nLCBKb2huIEMuIER1bGluLCBOaWNvbGUgUm9zcy1aZWhuZGVyLCBKb3NodWEgRC4gQnJhaGluc2t5LCAmIFRhbnlhIE0uIEx1aHJtYW5uIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwfQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZSA9IEYsIHdhcm5pbmcgPSBGQUxTRSkKYGBgCgpJbiB0aGlzIG5vdGVib29rIHdlIGNvbmR1Y3QgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2VzIChFRkFzKSBvbiB0aGUgZGF0YXNldHMgZm9yIG91ciBzdHVkaWVzIG9mIGNvbmNlcHRzIG9mIG1lbnRhbCBsaWZlLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50cyBqdWRnZWQgdGhlIHZhcmlvdXMgbWVudGFsIGNhcGFjaXRpZXMgb2YgYSBwYXJ0aWN1bGFyIHRhcmdldCBlbnRpdHkuIFdlIGFuYWx5emUgZGF0YXNldHMgZm9yIGFkdWx0cyBhbmQgY2hpbGRyZW4gZnJvbSBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzOiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIGFuZCBWYW51YXR1LiAKClRoaXMgbm90ZWJvb2sgY29udGFpbnMgdGhlIHJlc3VsdHMgcHJlc2VudGVkIGluIHRoZSBtYWluIHRleHQsIGluIHdoaWNoIHdlIHVzZSBQZWFyc29uIGNvcnJlbGF0aW9ucyB3aXRoIG91ciB0aHJlZS1wb2ludCByZXNwb25zZSBzY2FsZSAobm8gPSAwLCBraW5kYSA9IDAuNSwgeWVzID0gMSk7IHNlZSBzdXBwbGVtZW50YWwgYW5hbHlzZXMgZm9yIGEgdmVyc2lvbiBvZiB0aGVzZSBhbmFseXNlcyB0cmVhdGluZyBraW5kYSA9IHllcyA9IDEgYW5kIHVzaW5nIHRldHJhY2hvcmljIGNvcnJlbGF0aW9ucy4KCgpgYGB7ciwgZWNobyA9IEYsIG1lc3NhZ2UgPSBGfQpzb3VyY2UoIi4vc2NyaXB0cy9kZXBlbmRlbmNpZXMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2N1c3RvbV9mdW5zLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy92YXJfcmVjb2RlX2NvbnRyYXN0LlIiKQpgYGAKCmBgYHtyIGRhdGF9CiMgcmVhZCBpbiBkYXRhLCBzaG9ydGVuICJmZWVsIHNpY2ssIiBhbmQgbGltaXQgdG8gdW5pdmVyc2FsIHRhcmdldHMgYW5kIHF1ZXN0aW9uczogYWR1bHRzCmRfdXNfYWR1bHRzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfdXNfYWR1bHRzLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQpkX2doX2FkdWx0cyA8LSByZWFkX2NzdigiLi4vZGF0YS9kX2doX2FkdWx0cy5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF90aF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpCmRfY2hfYWR1bHRzIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfY2hfYWR1bHRzLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQpkX3Z0X2FkdWx0cyA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3Z0X2FkdWx0cy5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKCiMgcmVhZCBpbiBkYXRhLCBzaG9ydGVuICJmZWVsIHNpY2ssIiBhbmQgbGltaXQgdG8gdW5pdmVyc2FsIHRhcmdldHMgYW5kIHF1ZXN0aW9uczogY2hpbGRyZW4KZF91c19jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3VzX2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQpkX2doX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfZ2hfY2hpbGRyZW4uY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpCmRfdGhfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9jaGlsZHJlbi5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkKZF9jaF9jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX2NoX2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKQpkX3Z0X2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfdnRfY2hpbGRyZW4uY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogICMgZmlsdGVyIG91dCBwYXJ0aWNpcGFudHMgb3V0c2lkZSBvZiB0aGUgYWdlIHJhbmdlCiAgZmlsdGVyKChhZ2UgPj0gNiAmIGFnZSA8PSAxMikgfCBpcy5uYShhZ2UpKQpgYGAKCmBgYHtyIHdpZGV9CiMgbWFrZSB3aWRlLWZvcm0gZGF0YXNldHMgZm9yIEVGQTogYWR1bHRzCmRfdXNfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF91c19hZHVsdHMpCmRfZ2hfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF9naF9hZHVsdHMpCmRfdGhfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF90aF9hZHVsdHMpCmRfY2hfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF9jaF9hZHVsdHMpCmRfdnRfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF92dF9hZHVsdHMpCgojIG1ha2Ugd2lkZS1mb3JtIGRhdGFzZXRzIGZvciBFRkE6IGNoaWxkcmVuCmRfdXNfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX3VzX2NoaWxkcmVuKQpkX2doX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF9naF9jaGlsZHJlbikKIyBkX2doX2VuZ19jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfZ2hfZW5nX2NoaWxkcmVuKQpkX3RoX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF90aF9jaGlsZHJlbikKZF9jaF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfY2hfY2hpbGRyZW4pCmRfdnRfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX3Z0X2NoaWxkcmVuKQpgYGAKCgojIEFkdWx0cwoKIyMgU2FtcGxlcwoKYGBge3Igc2FtcGxlcyBhZHVsdHN9CmJpbmRfcm93cyhkX3VzX2FkdWx0cywgZF9naF9hZHVsdHMsIGRfdGhfYWR1bHRzLCBkX2NoX2FkdWx0cywgZF92dF9hZHVsdHMpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGxldmVsc19jb3VudHJ5KSkgJT4lCiAgZGlzdGluY3QoY291bnRyeSwgc3Vial9pZCkgJT4lCiAgY291bnQoY291bnRyeSkgJT4lCiAgamFuaXRvcjo6YWRvcm5fdG90YWxzKCkKYGBgCgojIyBTY2FsZSB1c2UKCmBgYHtyIHNjYWxlIHVzZSBtZWFuIG92ZXJhbGwgYWR1bHRzfQpiaW5kX3Jvd3MoZF91c19hZHVsdHMsIGRfZ2hfYWR1bHRzLCBkX3RoX2FkdWx0cywgZF9jaF9hZHVsdHMsIGRfdnRfYWR1bHRzKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHJlc3BvbnNlX2NhdCA9IHJlY29kZV9mYWN0b3IocmVzcG9uc2VfY2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJraW5kIG9mIiA9ICJraW5kIG9mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9ICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWlzc2luZyA9ICJtaXNzaW5nIGRhdGEiKSkgJT4lCiAgY291bnQoY291bnRyeSwgcmVzcG9uc2VfY2F0KSAlPiUKICBjb21wbGV0ZShyZXNwb25zZV9jYXQsIG5lc3RpbmcoY291bnRyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocmVzcG9uc2VfY2F0LCBwcm9wKSAlPiUKICBqYW5pdG9yOjphZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAyKQpgYGAKCiMjIEZhY3RvciByZXRlbnRpb246IHBhcmFsbGVsIGFuYWx5c2lzCgpgYGB7ciBwYXJhbGxlbCBkaXN0IGFkdWx0cywgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KIyBOT1RFOiBIZXJlIGlzIGRpc3RyaWJ1dGlvbiBvdmVyIG91dGNvbWVzIG9mIHBhcmFsbGVsIGFuYWx5c2lzIHdpdGggMTAwIGl0ZXJhdGlvbnMuIFdlJ2xsIGNob29zZSB0aGUgbWVkaWFuIG51bWJlciBvZiBmYWN0b3JzLgoKaWYgKGZpbGUuZXhpc3RzKCIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfYWR1bHRzLlJEUyIpKSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMgPC0gcmVhZFJEUygiLi4vcmVzdWx0cy9wYV9vdXRjb21lc19kaXN0X2FkdWx0cy5SRFMiKQogIAp9IGVsc2UgewogIAogIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzIDwtIGRhdGEuZnJhbWUodXMgPSBOVUxMLCBnaCA9IE5VTEwsIHRoID0gTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gTlVMTCwgdnQgPSBOVUxMKQogIAogIHNldC5zZWVkKDU0MzIxKQogIG5fY29yZXMgPC0gcGFyYWxsZWw6OmRldGVjdENvcmVzKCkKICBvcHRpb25zKG1jLmNvcmVzID0gbl9jb3JlcykKICAKICBmb3IgKGkgaW4gMToxMDApIHsKICAgIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzW2ksICJ1cyJdIDwtIGZhLnBhcmFsbGVsKGRfdXNfYWR1bHRzX3csIHBsb3QgPSBGKSRuZmFjdAogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgImdoIl0gPC0gZmEucGFyYWxsZWwoZF9naF9hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0ICAgICAKICAgIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzW2ksICJ0aCJdIDwtIGZhLnBhcmFsbGVsKGRfdGhfYWR1bHRzX3csIHBsb3QgPSBGKSRuZmFjdAogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgImNoIl0gPC0gZmEucGFyYWxsZWwoZF9jaF9hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2FkdWx0c1tpLCAidnQiXSA8LSBmYS5wYXJhbGxlbChkX3Z0X2FkdWx0c193LCBwbG90ID0gRikkbmZhY3QKICB9CiAgCiAgc2F2ZVJEUyhwYV9vdXRjb21lc19kaXN0X2FkdWx0cywgZmlsZSA9ICIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfYWR1bHRzLlJEUyIpCn0KCiMgcGxvdApwYV9vdXRjb21lc19kaXN0X2FkdWx0cyAlPiUKICByb3duYW1lc190b19jb2x1bW4oIml0ZXIiKSAlPiUKICBnYXRoZXIoY291bnRyeSwgbmZhY3QsIC1pdGVyKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBuZmFjdCkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeSkgKwogIGdlb21fYmFyKHN0YXQgPSAiY291bnQiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMSwgbWF4KHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzKSArIDEpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoMCwgMTAwLCAxKSkgKwogIGxhYnMoeCA9ICJOdW1iZXIgb2YgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgZmEucGFyYWxsZWwoKSIpCmBgYAoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgpgYGB7ciBlZmEgYWR1bHRzfQpzZXQuc2VlZCg1NDMyMSkKCiMgZG8gZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzOiBhZHVsdHMKZWZhX3VzX2FkdWx0cyA8LSBmYV9mdW4oZF91c19hZHVsdHNfdywKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyR1cyksCiAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdXNfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInVzQURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3VzX2FkdWx0cyRsb2FkaW5ncykpCgplZmFfZ2hfYWR1bHRzIDwtIGZhX2Z1bihkX2doX2FkdWx0c193LCAKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyRnaCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfZ2hfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImdoQURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2doX2FkdWx0cyRsb2FkaW5ncykpCgplZmFfdGhfYWR1bHRzIDwtIGZhX2Z1bihkX3RoX2FkdWx0c193LCAKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdGhfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInRoQURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3RoX2FkdWx0cyRsb2FkaW5ncykpCgplZmFfY2hfYWR1bHRzIDwtIGZhX2Z1bihkX2NoX2FkdWx0c193LCAKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyRjaCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfY2hfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImNoQURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2NoX2FkdWx0cyRsb2FkaW5ncykpCgplZmFfdnRfYWR1bHRzIDwtIGZhX2Z1bihkX3Z0X2FkdWx0c193LCAKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyR2dCksCiAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdnRfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInZ0QURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3Z0X2FkdWx0cyRsb2FkaW5ncykpCmBgYAoKYGBge3IgZmFjdG9yIG5hbWVzIGFkdWx0c30KZmFjdG9yX25hbWVzX2FkdWx0cyA8LSBkYXRhLmZyYW1lKGZhY3RvciA9IGMoY29sbmFtZXMoZWZhX3VzX2FkdWx0cyRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9naF9hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdGhfYWR1bHRzJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2NoX2FkdWx0cyRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV92dF9hZHVsdHMkbG9hZGluZ3MpKSkgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGNhc2Vfd2hlbihncmVwbCgiXnVzIiwgZmFjdG9yKSB+ICJVUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl5naCIsIGZhY3RvcikgfiAiR2hhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJedGgiLCBmYWN0b3IpIH4gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXmNoIiwgZmFjdG9yKSB+ICJDaGluYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl52dCIsIGZhY3RvcikgfiAiVmFudWF0dSIpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVsc19jb3VudHJ5KSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9uYW1lID0gZ3N1YigiXnVzIiwgIlVTICIsIGZhY3RvciksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmdoIiwgIkdoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnRoIiwgIlRoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmNoIiwgIkNoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnZ0IiwgIlZhLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiQURVTFRTIiwgImFkdWx0cyIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJfRiIsICIgRmFjdG9yICIsIGZhY3Rvcl9uYW1lKSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9kZXNjcmlwdCA9IHJlY29kZShmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c0FEVUxUU19GMSA9ICJCb2R5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQURVTFRTX0YyID0gIkhlYXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQURVTFRTX0YzID0gIk1pbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hBRFVMVFNfRjEgPSAiSW5uZXIgc3BoZXJlIChtaW5kLWxpa2UpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdoQURVTFRTX0YyID0gIkJvZHktbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaEFEVUxUU19GMyA9ICJJbnRlcnBlcnNvbmFsLCByZWxpZ2lvdXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhBRFVMVFNfRjEgPSAiQm9keS1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQURVTFRTX0YyID0gIkhlYXJ0LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhBRFVMVFNfRjMgPSAiTWluZC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoQURVTFRTX0YxID0gIkhlYXJ0LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hBRFVMVFNfRjIgPSAiQm9keS1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoQURVTFRTX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dEFEVUxUU19GMSA9ICJIYXJtb255IChtaW5kLWxpa2UsIGhlYXJ0LWxpa2UpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0QURVTFRTX0YyID0gIlNpbiAoYm9keS1saWtlKSIpLAogICAgICAgICBmYWN0b3JfbGFiZGVzY3JpcHQgPSBwYXN0ZShnc3ViKCIuKl9GIiwgIkYiLCBmYWN0b3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfZGVzY3JpcHQsIHNlcCA9ICI6ICIpKQpgYGAKCiMjIEZhY3RvciBsb2FkaW5ncwoKYGBge3Igb3JkZXIgYWR1bHRzfQojIG9yZGVyIGNhcGFjaXRpZXM6IGFkdWx0cwpvcmRlcl91c19hZHVsdHMgPC0gZmEuc29ydChlZmFfdXNfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX2doX2FkdWx0cyA8LSBmYS5zb3J0KGVmYV9naF9hZHVsdHMpJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfdGhfYWR1bHRzIDwtIGZhLnNvcnQoZWZhX3RoX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl9jaF9hZHVsdHMgPC0gZmEuc29ydChlZmFfY2hfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX3Z0X2FkdWx0cyA8LSBmYS5zb3J0KGVmYV92dF9hZHVsdHMpJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKYGBgCgpgYGB7ciBsb2FkaW5ncyBhZHVsdHN9CiMgY29tcGlsZSBsb2FkaW5nczogYWR1bHRzCmxvYWRpbmdzX2FkdWx0cyA8LSBiaW5kX3Jvd3MoCiAgbG9hZGluZ3NfZnVuKGVmYV91c19hZHVsdHMpICU+JSBtdXRhdGUoY291bnRyeSA9ICJVUyIpLAogIGxvYWRpbmdzX2Z1bihlZmFfZ2hfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiR2hhbmEiKSwKICBsb2FkaW5nc19mdW4oZWZhX3RoX2FkdWx0cykgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlRoYWlsYW5kIiksCiAgbG9hZGluZ3NfZnVuKGVmYV9jaF9hZHVsdHMpICU+JSBtdXRhdGUoY291bnRyeSA9ICJDaGluYSIpLAogIGxvYWRpbmdzX2Z1bihlZmFfdnRfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVmFudWF0dSIpKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIGNhcGFjaXR5X29yZF91cyA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdXNfYWR1bHRzKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX2doID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl9naF9hZHVsdHMpLAogICAgICAgICBjYXBhY2l0eV9vcmRfdGggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3RoX2FkdWx0cyksCiAgICAgICAgIGNhcGFjaXR5X29yZF9jaCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfY2hfYWR1bHRzKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3Z0ID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl92dF9hZHVsdHMpKSAlPiUKICBhcnJhbmdlKGNvdW50cnksIGZhY3RvciwgZGVzYyhhYnMobG9hZGluZykpLCBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cykKYGBgCgpgYGB7ciBoZWF0bWFwIGFkdWx0cywgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KIyBtYWtlIGhlYXRtYXAgZmlndXJlOiBhZHVsdHMKbG9hZGluZ3NfYWR1bHRzICU+JQogIG11dGF0ZShmYWN0b3JfbnVtID0gYXMubnVtZXJpYyhnc3ViKCIuKkYiLCAiIiwgZmFjdG9yKSkpICU+JQogIG11dGF0ZShzYW1wbGUgPSBwYXN0ZShjb3VudHJ5LCAiYWR1bHRzIiwgc2VwID0gIlxuIikpICU+JQogIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0LCBmYWN0b3JfbnVtKSwgCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdXMpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2VjKSksIAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfZ2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3RoKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9jaCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdnQpKSwKICAgICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGZhY2V0X2dyaWQofiByZW9yZGVyKHNhbXBsZSwgYXMubnVtZXJpYyhjb3VudHJ5KSksIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAyMCwgYmFyd2lkdGggPSAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgcGFuZWwuc3BhY2luZy54ID0gdW5pdCgwLjgsICJsaW5lcyIpLAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9ICJDYXBhY2l0eSIsIGZpbGwgPSAiRmFjdG9yXG5sb2FkaW5nIikKYGBgCgojIyBDb25ncnVlbmNlCgpgYGB7ciBjb25ncnVlbmNlIGFkdWx0c30KY29uZ19hZHVsdHMgPC0gZmEuY29uZ3J1ZW5jZSh4ID0gbGlzdChlZmFfdXNfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9naF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3RoX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV92dF9hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IDUpICU+JQogICMgZ2V0X3VwcGVyX3RyaV9mdW4oKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JfQSIpICU+JQogIGdhdGhlcihmYWN0b3JfQiwgY29uZywgLWZhY3Rvcl9BKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgcmVuYW1lX2FsbChsaXN0KH4gKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgIHJlbmFtZV9hbGwobGlzdCh+IChwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkpCmBgYAoKYGBge3IgdG9wIG1hdGNoIGFkdWx0c30KY29uZ19hZHVsdHNfdG9wX21hdGNoX0EgPC0gdG9wX21hdGNoX2Z1bihjb25nX2FkdWx0cywgImNvdW50cnlfQSIpCmNvbmdfYWR1bHRzX3RvcF9tYXRjaF9CIDwtIHRvcF9tYXRjaF9mdW4oY29uZ19hZHVsdHMsICJjb3VudHJ5X0IiKQpgYGAKCmBgYHtyIGNvbmcgYWxsIHBhaXJzIGFkdWx0cywgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KY29uZ19hZHVsdHMgJT4lCiAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgZnVucyhnc3ViKCIgXFwoIiwgIlxuXFwoIiwgLikpKSAlPiUKICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICBmdW5zKGdzdWIoIlxcLyIsICJcXC9cbiIsIC4pKSkgJT4lCiAgIyBsZWZ0X2pvaW4oY29uZ19hZHVsdHNfdG9wX21hdGNoX0EgJT4lIHJlbmFtZSh0b3BfbWF0Y2hfQSA9IHRvcF9tYXRjaCkpICU+JQogIGxlZnRfam9pbihjb25nX2FkdWx0c190b3BfbWF0Y2hfQiAlPiUgcmVuYW1lKHRvcF9tYXRjaF9CID0gdG9wX21hdGNoKSkgJT4lCiAgbXV0YXRlKGlzX3RvcF9tYXRjaCA9IGNhc2Vfd2hlbihmYWN0b3JfQSA9PSBmYWN0b3JfQiB+ICJib2xkLml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZhY3Rvcl9BID09IHRvcF9tYXRjaF9BIH4gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX0IgPT0gdG9wX21hdGNoX0IgfiAiYm9sZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gInBsYWluIikpICU+JQogICMgbXV0YXRlKGNvbmcgPSBpZmVsc2UoY29uZyA9PSAxLCBOQV9yZWFsXywgY29uZykpICU+JQogIG11dGF0ZShzYW1wbGVfQSA9IHBhc3RlKHRvdXBwZXIoY291bnRyeV9BKSwgImFkdWx0cyIsIHNlcCA9ICI6XG4iKSkgJT4lCiAgbXV0YXRlKHNhbXBsZV9CID0gcGFzdGUodG91cHBlcihjb3VudHJ5X0IpLCAiYWR1bHRzIiwgc2VwID0gIjpcbiIpKSAlPiUKICBtdXRhdGVfYXQodmFycyhjb3VudHJ5X0EsIGNvdW50cnlfQiksCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKHRvdXBwZXIoLiksIGxldmVscyA9IHRvdXBwZXIobGV2ZWxzX2NvdW50cnkpKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGZhY3Rvcl9sYWJkZXNjcmlwdF9BLAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0X0IsIGRlc2MoZmFjdG9yX2xhYmRlc2NyaXB0X0IpKSwKICAgICAgICAgICAgIGZpbGwgPSBjb25nKSkgKwogIGZhY2V0X2dyaWQocmVvcmRlcihzYW1wbGVfQiwgYXMubnVtZXJpYyhjb3VudHJ5X0IpKSB+IAogICAgICAgICAgICAgICByZW9yZGVyKHNhbXBsZV9BLCBhcy5udW1lcmljKGNvdW50cnlfQSkpLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNhc2Vfd2hlbihpcy5uYShjb25nKSB+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGZvcm1hdChyb3VuZChjb25nLCAyKSwgbnNtYWxsID0gMikpLAogICAgICAgICAgICAgICAgZm9udGZhY2UgPSBpc190b3BfbWF0Y2gsCiAgICAgICAgICAgICAgICBjb2xvciA9IGlzX3RvcF9tYXRjaCksCiAgICAgICAgICAgIHNpemUgPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZGFya3JlZCIsICJkYXJrYmx1ZSIsICJibGFjayIpKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gInZpcmlkaXMiLCAKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMjUsIGJhcmhlaWdodCA9IDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgZmFjZSA9ICJib2xkIikpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9IGV4cHJlc3Npb24oaXRhbGljKHJbY10pKSkKYGBgCgojIyBCb290c3RyYXBwZWQgY29uZ3J1ZW5jZQoKYGBge3IgYm9vdHN0cmFwIGNvbmdydWVuY2UgYWR1bHRzfQppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvY29uZ19kZl9hZHVsdHNfb2JsaXF1ZS5SRFMiKSkgewogIAogIGNvbmdfZGZfYWR1bHRzIDwtIHJlYWRSRFMoIi4uL3Jlc3VsdHMvY29uZ19kZl9hZHVsdHNfb2JsaXF1ZS5SRFMiKQogIAp9IGVsc2UgewogIAogIGJzX2FkdWx0cyA8LSBsb2FkaW5nc19hZHVsdHMgJT4lCiAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSAlPiUKICAgIHNlbGVjdCgtY2FwYWNpdHkpICU+JQogICAgc2pzdGF0czo6Ym9vdHN0cmFwKDEwMDApIAogIAogIGZhY3RvcnMgPC0gbGV2ZWxzKGZhY3Rvcihsb2FkaW5nc19hZHVsdHMkZmFjdG9yKSkKICAKICBjb25nX2RmX2FkdWx0cyA8LSBkYXRhLmZyYW1lKE5VTEwpCiAgZm9yIChpIGluIGZhY3RvcnMpIHsKICAgIGZvciAoaiBpbiBmYWN0b3JzKSB7CiAgICAgIGNuYW1lIDwtIHBhc3RlKGksIGosIHNlcCA9ICIuIikKICAgICAgdGVtcCA8LSBic19hZHVsdHMgJT4lCiAgICAgICAgbXV0YXRlKGNvbmcgPSBtYXBfZGJsKHN0cmFwLCB+bHNhOjpjb3NpbmUoYXMuZGF0YS5mcmFtZSgueClbLGldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmRhdGEuZnJhbWUoLngpWyxqXSkpKQogICAgICBjb25nX2RmX2FkdWx0c1sxOjEwMDAsIGNuYW1lXSA8LSB0ZW1wJGNvbmcKICAgIH0KICB9CiAgCiAgY29uZ19kZl9hZHVsdHMgPC0gY29uZ19kZl9hZHVsdHMgJT4lCiAgICBnYXRoZXIoZmFjdG9yX3BhaXIsIGNvbmcpICU+JQogICAgc2VwYXJhdGUoZmFjdG9yX3BhaXIsIGludG8gPSBjKCJmYWN0b3JfQSIsICJmYWN0b3JfQiIpLCBzZXAgPSAiXFwuIikgJT4lCiAgICBncm91cF9ieShmYWN0b3JfQSwgZmFjdG9yX0IpICU+JQogICAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGNvbmcpLAogICAgICAgICAgICAgIGNpX2xvd2VyID0gY2lfbG93ZXIoY29uZyksCiAgICAgICAgICAgICAgY2lfdXBwZXIgPSBjaV91cHBlcihjb25nKSkgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQSIsIHNlcCA9ICJfIikpKSkgJT4lCiAgICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkKICAKICBybShpLCBqLCBjbmFtZSwgdGVtcCwgZmFjdG9ycykKICAKICBzYXZlUkRTKGNvbmdfZGZfYWR1bHRzLCBmaWxlID0gIi4uL3Jlc3VsdHMvY29uZ19kZl9hZHVsdHNfb2JsaXF1ZS5SRFMiKQp9CmBgYAoKYGBge3IgY29uZyBtaW4gYWR1bHRzfQojIGZpbmQgbWluaW11bSB2YWx1ZSB0byBzZXQgY29uc3RhbnQgbG93ZXIgYm91bmQgb2YgcGxvdHMKbWluX2NvbmdfYWR1bHRzIDwtIGNvbmdfZGZfYWR1bHRzICU+JQogIHN1bW1hcmlzZShtaW5fY29uZyA9IG1pbihjaV9sb3dlciwgbmEucm0gPSBUKSkKYGBgCgojIyMgRmlndXJlIDMKCmBgYHtyIGNvbmcgY2lzIHVzIGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSAzCmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzLCB3aGljaF9jb3VudHJ5ID0gIlVTIikgKwogIGxhYnMoeCA9IE5VTEwpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwM19vYmxpcXVlLnBuZyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwM19vYmxpcXVlLnBkZiIpCmBgYAoKIyMjIEZpZ3VyZSBTMgoKYGBge3IgY29uZyBjaXMgZ2ggYmFzZSBhZHVsdHMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIFMyCmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgICAgICAgICAgICAgICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICAgICAgICAgICAgICAgIGZ1bnMoZ3N1YigiIFxcKCIsICJcblxcKCIsIC4pKSkgJT4lCiAgICAgICAgICAgICAgICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgICAgICAgICAgICAgICB2YXJzKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSwKICAgICAgICAgICAgICAgICAgZnVucyhnc3ViKCJcXC8iLCAiXFwvXG4iLCAuKSkpLCAKICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkdoYW5hIikgKwogIHlsaW0obWluX2NvbmdfYWR1bHRzJG1pbl9jb25nLCAxKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzAyX29ibGlxdWUucG5nIikKYGBgCgojIyMgRmlndXJlIFMzCgpgYGB7ciBjb25nIGNpcyB0aCBiYXNlIGFkdWx0cywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgUzMKY29uZ19wbG90X2Z1bihjb25nX2RmID0gY29uZ19kZl9hZHVsdHMsIAogICAgICAgICAgICAgIHdoaWNoX2NvdW50cnkgPSAiVGhhaWxhbmQiKSArCiAgeWxpbShtaW5fY29uZ19hZHVsdHMkbWluX2NvbmcsIDEpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDNfb2JsaXF1ZS5wbmciKQpgYGAKCiMjIyBGaWd1cmUgUzQKCmBgYHtyIGNvbmcgY2lzIGNoIGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSBTNApjb25nX3Bsb3RfZnVuKGNvbmdfZGYgPSBjb25nX2RmX2FkdWx0cywgCiAgICAgICAgICAgICAgd2hpY2hfY291bnRyeSA9ICJDaGluYSIpICsKICB5bGltKG1pbl9jb25nX2FkdWx0cyRtaW5fY29uZywgMSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwNF9vYmxpcXVlLnBuZyIpCmBgYAoKIyMjIEZpZ3VyZSBTNQoKYGBge3IgY29uZyBjaXMgdnQgYmFzZSBhZHVsdHMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIFM1CmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgICAgICAgICAgICAgICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICAgICAgICAgICAgICAgIGZ1bnMoZ3N1YigiIFxcKCIsICJcblxcKCIsIC4pKSkgJT4lCiAgICAgICAgICAgICAgICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgICAgICAgICAgICAgICB2YXJzKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSwKICAgICAgICAgICAgICAgICAgZnVucyhnc3ViKCJcXC8iLCAiXFwvXG4iLCAuKSkpLCAKICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIlZhbnVhdHUiKSArCiAgeWxpbShtaW5fY29uZ19hZHVsdHMkbWluX2NvbmcsIDEpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDVfb2JsaXF1ZS5wbmciKQpgYGAKCmBgYHtyIGJvZHkgbWluZCBjb25nIGFkdWx0c30KIyAiSW4gZWFjaCBzYW1wbGUsIHRoZXJlIHdhcyBhIGZhY3RvciB0aGF0IHdhcyBzaW1pbGFyIHRvIFVTIGFkdWx0c+KAmSDigJxib2R54oCdIGZhY3Rvci4uLgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKCiMgIi4uLmFuZCBub3Qgc2ltaWxhciB0byB0aGUgVVMgYWR1bHQg4oCcbWluZOKAnSBmYWN0b3IsIC4uLgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKCiMgIi4uLiBhbmQgYSBmYWN0b3IgdGhhdCB3YXMgbXVjaCBtb3JlIHNpbWlsYXIgdG8gVVMgYWR1bHRz4oCZIOKAnG1pbmTigJ0gZmFjdG9yLi4uCmNvbmdfZGZfYWR1bHRzICU+JSAKICBmaWx0ZXIoZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSksIAogICAgICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSwKICAgICAgICAgY291bnRyeV9BICE9ICJVUyIsIGNvdW50cnlfQiA9PSAiVVMiKQoKIyAiLi4udGhhbiB0aGUgVVMgYWR1bHQg4oCcYm9keeKAnSBmYWN0b3IuIgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKYGBgCmBgYHtyIGhlYXJ0IGNvbmcgYWR1bHRzfQpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSwgCiAgICAgICAgIGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSwKICAgICAgICAgY291bnRyeV9BICVpbiUgYygiVGhhaWxhbmQiLCAiQ2hpbmEiKSwgY291bnRyeV9CID09ICJVUyIpCgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIHwgCiAgICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSksCiAgICAgICAgIGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSwKICAgICAgICAgY291bnRyeV9BICVpbiUgYygiVGhhaWxhbmQiLCAiQ2hpbmEiKSwgY291bnRyeV9CID09ICJVUyIpCmBgYAoKCiMgQ2hpbGRyZW4KCiMjIFNhbXBsZXMKCmBgYHtyIHNhbXBsZXMgY2hpbGRyZW59CmJpbmRfcm93cyhkX3VzX2NoaWxkcmVuLCBkX2doX2NoaWxkcmVuLCBkX3RoX2NoaWxkcmVuLCBkX2NoX2NoaWxkcmVuLCBkX3Z0X2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGRpc3RpbmN0KGNvdW50cnksIHN1YmpfaWQpICU+JQogIGNvdW50KGNvdW50cnkpICU+JSAKICBqYW5pdG9yOjphZG9ybl90b3RhbHMoKQpgYGAKCiMjIFNjYWxlIHVzZQoKYGBge3Igc2NhbGUgdXNlIG1lYW4gb3ZlcmFsbCBjaGlsZHJlbn0KYmluZF9yb3dzKGRfdXNfY2hpbGRyZW4sIGRfZ2hfY2hpbGRyZW4sIGRfdGhfY2hpbGRyZW4sIGRfY2hfY2hpbGRyZW4sIGRfdnRfY2hpbGRyZW4pICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGxldmVsc19jb3VudHJ5KSwKICAgICAgICAgcmVzcG9uc2VfY2F0ID0gcmVjb2RlX2ZhY3RvcihyZXNwb25zZV9jYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIiA9ICJubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpbmQgb2YiID0gImtpbmQgb2YiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZXMiID0gInllcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5taXNzaW5nID0gIm1pc3NpbmcgZGF0YSIpKSAlPiUKICBjb3VudChjb3VudHJ5LCByZXNwb25zZV9jYXQpICU+JQogIGNvbXBsZXRlKHJlc3BvbnNlX2NhdCwgbmVzdGluZyhjb3VudHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChyZXNwb25zZV9jYXQsIHByb3ApICU+JQogIGphbml0b3I6OmFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDIpCmBgYAoKIyMgRmFjdG9yIHJldGVudGlvbjogcGFyYWxsZWwgYW5hbHlzaXMKCmBgYHtyIHBhcmFsbGVsIGRpc3QgY2hpbGRyZW4sIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjV9CiMgSGVyZSdzIHRoZSBkaXN0cmlidXRpb24gb3ZlciBvdXRjb21lcyBvZiBwYXJhbGxlbCBhbmFseXNpcyB3aXRoIDEwMCBpdGVyYXRpb25zLiBXZSdsbCBjaG9vc2UgdGhlIG1lZGlhbiBudW1iZXIgb2YgZmFjdG9ycy4KCmlmIChmaWxlLmV4aXN0cygiLi4vcmVzdWx0cy9wYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuLlJEUyIpKSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiA8LSByZWFkUkRTKCIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4uUkRTIikKICAKfSBlbHNlIHsKICAKICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuIDwtIGRhdGEuZnJhbWUodXMgPSBOVUxMLCBnaCA9IE5VTEwsIHRoID0gTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBOVUxMLCB2dCA9IE5VTEwpCiAgCiAgc2V0LnNlZWQoNTQzMjEpCiAgbl9jb3JlcyA8LSBwYXJhbGxlbDo6ZGV0ZWN0Q29yZXMoKQogIG9wdGlvbnMobWMuY29yZXMgPSBuX2NvcmVzKQogIAogIGZvciAoaSBpbiAxOjEwMCkgewogICAgcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbltpLCAidXMiXSA8LSBmYS5wYXJhbGxlbChkX3VzX2NoaWxkcmVuX3csIHBsb3QgPSBGKSRuZmFjdAogICAgcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbltpLCAiZ2giXSA8LSBmYS5wYXJhbGxlbChkX2doX2NoaWxkcmVuX3csIHBsb3QgPSBGKSRuZmFjdCAgICAgCiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJ0aCJdIDwtIGZhLnBhcmFsbGVsKGRfdGhfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJjaCJdIDwtIGZhLnBhcmFsbGVsKGRfY2hfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJ2dCJdIDwtIGZhLnBhcmFsbGVsKGRfdnRfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0CiAgfQogIAogIHNhdmVSRFMocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiwgZmlsZSA9ICIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4uUkRTIikKfQoKIyBwbG90CnBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4gJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJpdGVyIikgJT4lCiAgZ2F0aGVyKGNvdW50cnksIG5mYWN0LCAtaXRlcikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaCIsICJ0aCIsICJjaCIsICJ2dCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxldmVsc19jb3VudHJ5KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbmZhY3QpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnkpICsKICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDEsIG1heChwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuKSArIDEpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoMCwgMTAwLCAxKSkgKwogIGxhYnMoeCA9ICJOdW1iZXIgb2YgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgZmEucGFyYWxsZWwoKSIpCmBgYAoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgpgYGB7ciBlZmEgY2hpbGRyZW59CnNldC5zZWVkKDU0MzIxKQoKIyBkbyBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXM6IGNoaWxkcmVuCmVmYV91c19jaGlsZHJlbiA8LSBmYV9mdW4oZF91c19jaGlsZHJlbl93LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbWVkaWFuKHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4kdXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9yb3QgPSAib2JsaW1pbiIpCmNvbG5hbWVzKGVmYV91c19jaGlsZHJlbiRsb2FkaW5ncykgPC0gcGFzdGUwKCJ1c0NISUxEUkVOXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdXNfY2hpbGRyZW4kbG9hZGluZ3MpKQoKZWZhX2doX2NoaWxkcmVuIDwtIGZhX2Z1bihkX2doX2NoaWxkcmVuX3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJGdoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfZ2hfY2hpbGRyZW4kbG9hZGluZ3MpIDwtIHBhc3RlMCgiZ2hDSElMRFJFTl8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzKSkKCmVmYV90aF9jaGlsZHJlbiA8LSBmYV9mdW4oZF90aF9jaGlsZHJlbl93LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbWVkaWFuKHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4kdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9yb3QgPSAib2JsaW1pbiIpCmNvbG5hbWVzKGVmYV90aF9jaGlsZHJlbiRsb2FkaW5ncykgPC0gcGFzdGUwKCJ0aENISUxEUkVOXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdGhfY2hpbGRyZW4kbG9hZGluZ3MpKQoKZWZhX2NoX2NoaWxkcmVuIDwtIGZhX2Z1bihkX2NoX2NoaWxkcmVuX3csIAogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiRjaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX24uaXRlciA9IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX2NoX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImNoQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfdnRfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdnRfY2hpbGRyZW5fdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHZ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdnRfY2hpbGRyZW4kbG9hZGluZ3MpIDwtIHBhc3RlMCgidnRDSElMRFJFTl8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSkKYGBgCgpgYGB7ciBmYWN0b3IgbmFtZXMgY2hpbGRyZW59CmZhY3Rvcl9uYW1lc19jaGlsZHJlbiA8LSBkYXRhLmZyYW1lKGZhY3RvciA9IGMoY29sbmFtZXMoZWZhX3VzX2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfZ2hfY2hpbGRyZW4kbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV90aF9jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2NoX2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdnRfY2hpbGRyZW4kbG9hZGluZ3MpKSkgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9ICJjaGlsZHJlbiIpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gY2FzZV93aGVuKGdyZXBsKCJedXMiLCBmYWN0b3IpIH4gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXmdoIiwgZmFjdG9yKSB+ICJHaGFuYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl50aCIsIGZhY3RvcikgfiAiVGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJeY2giLCBmYWN0b3IpIH4gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXnZ0IiwgZmFjdG9yKSB+ICJWYW51YXR1IiksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBtdXRhdGUoZmFjdG9yX25hbWUgPSBnc3ViKCJedXMiLCAiVVMgIiwgZmFjdG9yKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJeZ2giLCAiR2guICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJedGgiLCAiVGguICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJeY2giLCAiQ2guICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJednQiLCAiVmEuICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJDSElMRFJFTiIsICJjaGlsZHJlbiIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJfRiIsICIgRmFjdG9yICIsIGZhY3Rvcl9uYW1lKSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9kZXNjcmlwdCA9IHJlY29kZShmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c0NISUxEUkVOX0YxID0gIkJvZHktbGlrZSwgbmVnYXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMiA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMyA9ICJIZWFydC1saWtlLCBwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaENISUxEUkVOX0YxID0gIkJvZHktbGlrZSwgbmVnYXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hDSElMRFJFTl9GMiA9ICJNaW5kLWxpa2UsIHBvc2l0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdoQ0hJTERSRU5fRjMgPSAiUHJheSwgYWRkLCBldGMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQ0hJTERSRU5fRjEgPSAiQm9keS1saWtlLCBwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0YyID0gIkhlYXJ0LWxpa2UsIG5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQ0hJTERSRU5fRjMgPSAiTWluZC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQ0hJTERSRU5fRjQgPSAiQWRkLCBwcmF5LCBldGMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoQ0hJTERSRU5fRjEgPSAiSGVhcnQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaENISUxEUkVOX0YyID0gIkJvZHktbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaENISUxEUkVOX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaENISUxEUkVOX0Y0ID0gIlByYXksIGV0Yy4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRDSElMRFJFTl9GMSA9ICJCb2R5LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRDSElMRFJFTl9GMiA9ICJNaW5kLWxpa2UsIHBvc2l0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjMgPSAiSGVhcnQtbGlrZSwgbmVnYXRpdmUiKSwKICAgICAgICAgZmFjdG9yX2xhYmRlc2NyaXB0ID0gcGFzdGUoZ3N1YigiLipfRiIsICJGIiwgZmFjdG9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX2Rlc2NyaXB0LCBzZXAgPSAiOiAiKSkKYGBgCgojIyBGYWN0b3IgbG9hZGluZ3MKCmBgYHtyIG9yZGVyIGNoaWxkcmVufQojIG9yZGVyIGNhcGFjaXRpZXM6IGNoaWxkcmVuCm9yZGVyX3VzX2NoaWxkcmVuIDwtIGZhLnNvcnQoZWZhX3VzX2NoaWxkcmVuKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX2doX2NoaWxkcmVuIDwtIGZhLnNvcnQoZWZhX2doX2NoaWxkcmVuKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX3RoX2NoaWxkcmVuIDwtIGZhLnNvcnQoZWZhX3RoX2NoaWxkcmVuKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX2NoX2NoaWxkcmVuIDwtIGZhLnNvcnQoZWZhX2NoX2NoaWxkcmVuKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX3Z0X2NoaWxkcmVuIDwtIGZhLnNvcnQoZWZhX3Z0X2NoaWxkcmVuKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCmBgYAoKYGBge3IgbG9hZGluZ3MgY2hpbGRyZW59CiMgY29tcGlsZSBsb2FkaW5nczogY2hpbGRyZW4KbG9hZGluZ3NfY2hpbGRyZW4gPC0gYmluZF9yb3dzKAogIGxvYWRpbmdzX2Z1bihlZmFfdXNfY2hpbGRyZW4pICU+JSBtdXRhdGUoY291bnRyeSA9ICJVUyIpLAogIGxvYWRpbmdzX2Z1bihlZmFfZ2hfY2hpbGRyZW4pICU+JSBtdXRhdGUoY291bnRyeSA9ICJHaGFuYSIpLAogIGxvYWRpbmdzX2Z1bihlZmFfdGhfY2hpbGRyZW4pICU+JSBtdXRhdGUoY291bnRyeSA9ICJUaGFpbGFuZCIpLAogIGxvYWRpbmdzX2Z1bihlZmFfY2hfY2hpbGRyZW4pICU+JSBtdXRhdGUoY291bnRyeSA9ICJDaGluYSIpLAogIGxvYWRpbmdzX2Z1bihlZmFfdnRfY2hpbGRyZW4pICU+JSBtdXRhdGUoY291bnRyeSA9ICJWYW51YXR1IikpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGxldmVsc19jb3VudHJ5KSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3VzID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl91c19jaGlsZHJlbiksCiAgICAgICAgIGNhcGFjaXR5X29yZF9naCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfZ2hfY2hpbGRyZW4pLAogICAgICAgICBjYXBhY2l0eV9vcmRfdGggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3RoX2NoaWxkcmVuKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX2NoID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl9jaF9jaGlsZHJlbiksCiAgICAgICAgIGNhcGFjaXR5X29yZF92dCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdnRfY2hpbGRyZW4pKSAlPiUKICBhcnJhbmdlKGNvdW50cnksIGZhY3RvciwgZGVzYyhhYnMobG9hZGluZykpLCBjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2NoaWxkcmVuKQpgYGAKCmBgYHtyIGhlYXRtYXAgY2hpbGRyZW4sIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjd9CiMgbWFrZSBoZWF0bWFwIGZpZ3VyZTogY2hpbGRyZW4KbG9hZGluZ3NfY2hpbGRyZW4gJT4lCiAgbXV0YXRlKGZhY3Rvcl9udW0gPSBhcy5udW1lcmljKGdzdWIoIi4qRiIsICIiLCBmYWN0b3IpKSkgJT4lCiAgbXV0YXRlKHNhbXBsZSA9IHBhc3RlKGNvdW50cnksICJjaGlsZHJlbiIsIHNlcCA9ICJcbiIpKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0LCBmYWN0b3JfbnVtKSwgCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdXMpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2VjKSksIAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfZ2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3RoKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9jaCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdnQpKSwKICAgICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGZhY2V0X2dyaWQofiByZW9yZGVyKHNhbXBsZSwgYXMubnVtZXJpYyhjb3VudHJ5KSksIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAyMCwgYmFyd2lkdGggPSAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgcGFuZWwuc3BhY2luZy54ID0gdW5pdCgwLjgsICJsaW5lcyIpLAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9ICJDYXBhY2l0eSIsIGZpbGwgPSAiRmFjdG9yXG5sb2FkaW5nIikKYGBgCgojIyBDb25ncnVlbmNlCgpTZWUgW0FsbCBzYW1wbGVzXSwgYmVsb3cuCgojIyBCb290c3RyYXBwZWQgY29uZ3J1ZW5jZQoKYGBge3IgYm9vdHN0cmFwIGNvbmdydWVuY2UgY2hpbGRyZW59CmlmIChmaWxlLmV4aXN0cygiLi4vcmVzdWx0cy9jb25nX2RmX2NoaWxkcmVuX29ibGlxdWUuUkRTIikpIHsKICAKICBjb25nX2RmX2NoaWxkcmVuIDwtIHJlYWRSRFMoIi4uL3Jlc3VsdHMvY29uZ19kZl9jaGlsZHJlbl9vYmxpcXVlLlJEUyIpCiAgCn0gZWxzZSB7CiAgCiAgYnNfY2hpbGRyZW4gPC0gbG9hZGluZ3NfY2hpbGRyZW4gJT4lCiAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSAlPiUKICAgIGZ1bGxfam9pbihsb2FkaW5nc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICAgICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSkgJT4lCiAgICBzZWxlY3QoLWNhcGFjaXR5KSAlPiUKICAgIHNqc3RhdHM6OmJvb3RzdHJhcCgxMDAwKSAKICAKICBjb25nX2RmX2NoaWxkcmVuIDwtIGRhdGEuZnJhbWUoTlVMTCkKICAKICBmb3IgKGsgaW4gbGV2ZWxzX2NvdW50cnkpIHsKICAgIAogICAgZmFjdG9yc19jaGlsZHJlbiA8LSBsZXZlbHMoZmFjdG9yKGxvYWRpbmdzX2NoaWxkcmVuJGZhY3RvclsKICAgICAgbG9hZGluZ3NfY2hpbGRyZW4kY291bnRyeSA9PSBrXSkpCiAgICBmYWN0b3JzX2FkdWx0cyA8LSBsZXZlbHMoZmFjdG9yKGxvYWRpbmdzX2FkdWx0cyRmYWN0b3JbCiAgICAgIGxvYWRpbmdzX2FkdWx0cyRjb3VudHJ5ID09IGtdKSkKICAgIAogICAgZm9yIChpIGluIGZhY3RvcnNfY2hpbGRyZW4pIHsKICAgICAgZm9yIChqIGluIGZhY3RvcnNfYWR1bHRzKSB7CiAgICAgICAgY25hbWUgPC0gcGFzdGUoaSwgaiwgc2VwID0gIi4iKQogICAgICAgIHRlbXAgPC0gYnNfY2hpbGRyZW4gJT4lCiAgICAgICAgICBtdXRhdGUoY29uZyA9IG1hcF9kYmwoc3RyYXAsIH5sc2E6OmNvc2luZShhcy5kYXRhLmZyYW1lKC54KVssaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5kYXRhLmZyYW1lKC54KVssal0pKSkKICAgICAgICBjb25nX2RmX2NoaWxkcmVuWzE6MTAwMCwgY25hbWVdIDwtIHRlbXAkY29uZwogICAgICB9CiAgICB9CiAgICAKICAgIHJtKGksIGosIGNuYW1lLCB0ZW1wLCBmYWN0b3JzX2NoaWxkcmVuLCBmYWN0b3JzX2FkdWx0cykKICAgIAogIH0KICAKICBybShrKQogIAogIGNvbmdfZGZfY2hpbGRyZW4gPC0gY29uZ19kZl9jaGlsZHJlbiAlPiUKICAgIGdhdGhlcihmYWN0b3JfcGFpciwgY29uZykgJT4lCiAgICBzZXBhcmF0ZShmYWN0b3JfcGFpciwgaW50byA9IGMoImZhY3Rvcl9BIiwgImZhY3Rvcl9CIiksIHNlcCA9ICJcXC4iKSAlPiUKICAgIGdyb3VwX2J5KGZhY3Rvcl9BLCBmYWN0b3JfQikgJT4lCiAgICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oY29uZyksCiAgICAgICAgICAgICAgY2lfbG93ZXIgPSBjaV9sb3dlcihjb25nKSwKICAgICAgICAgICAgICBjaV91cHBlciA9IGNpX3VwcGVyKGNvbmcpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGZ1bGxfam9pbihmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkEiLCBzZXAgPSAiXyIpKSkpICU+JQogICAgZnVsbF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSkpICU+JQogICAgbXV0YXRlKGZhY3Rvcl9iaG1fQSA9IGNhc2Vfd2hlbigKICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSkgfiAiQm9keS1saWtlXG5jaGlsZCBmYWN0b3IiLAogICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSB+ICJNaW5kLWxpa2VcbmNoaWxkIGZhY3RvciIsCiAgICAgIGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSB+ICJIZWFydC1saWtlXG5jaGlsZCBmYWN0b3IiLAogICAgICBUUlVFIH4gIk90aGVyIikpICU+JQogICAgbXV0YXRlKGZhY3Rvcl9iaG1fQiA9IGNhc2Vfd2hlbigKICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiTG9jYWwgYWR1bHRzOlxuQm9keS1saWtlIGZhY3RvciIsCiAgICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpIH4gIkxvY2FsIGFkdWx0czpcbk1pbmQtbGlrZSBmYWN0b3IiLAogICAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiTG9jYWwgYWR1bHRzOlxuSGVhcnQtbGlrZSBmYWN0b3IiLAogICAgICBUUlVFIH4gIkxvY2FsIGFkdWx0czpcbk90aGVyIGZhY3RvciIpKQogIAogIHNhdmVSRFMoY29uZ19kZl9jaGlsZHJlbiwgZmlsZSA9ICIuLi9yZXN1bHRzL2NvbmdfZGZfY2hpbGRyZW5fb2JsaXF1ZS5SRFMiKQp9CmBgYAoKYGBge3IgY29uZyBtaW4gY2hpbGRyZW59CiMgZmluZCBtaW5pbXVtIHZhbHVlIHRvIHNldCBjb25zdGFudCBsb3dlciBib3VuZCBvZiBwbG90cwptaW5fY29uZ19jaGlsZHJlbiA8LSBjb25nX2RmX2NoaWxkcmVuICU+JQogIHN1bW1hcmlzZShtaW5fY29uZyA9IG1pbihjaV9sb3dlciwgbmEucm0gPSBUKSkKYGBgCgojIyMgRmlndXJlIDQKCmBgYHtyIGNvbmcgY2lzIGNoaWxkcmVuIGIsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjR9CiMgRklHVVJFIDQKIyBmaWcuYXNwIGNob3NlbiB0byBrZWVwIGFic29sdXRlIGhlaWdodCBvZiB5LWF4aXMgcmVsYXRpdmVseSBzaW1pbGFyIGFjcm9zcyBhZHVsdHMgYW5kIGNoaWxkcmVuCmNvbmdfZGZfY2hpbGRyZW4gJT4lCiAgbXV0YXRlKHJlZ2lvbl9BID0gY2FzZV93aGVuKAogICAgY291bnRyeV9BID09ICJVUyIgfiAiU0YgQmF5IEFyZWEiLAogICAgY291bnRyeV9BID09ICJHaGFuYSIgfiAiQ2FwZSBDb2FzdCIsCiAgICBjb3VudHJ5X0EgPT0gIlRoYWlsYW5kIiB+ICJDaGlhbmcgTWFpIiwKICAgIGNvdW50cnlfQSA9PSAiQ2hpbmEiIH4gIlNoYW5naGFpIiwKICAgIGNvdW50cnlfQSA9PSAiVmFudWF0dSIgfiAiUFYgJiBNYWxla3VsYSIpKSAlPiUKICBtdXRhdGUoc2FtcGxlX0EgPSBwYXN0ZShjb3VudHJ5X0EsIGFnZV9ncm91cF9BLCBzZXAgPSAiXG4iKSkgJT4lCiAgbXV0YXRlKGxhYl9BID0gcGFzdGUocGFzdGUwKHJlZ2lvbl9BLCAiLCIpLCAKICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAodG91cHBlcihjb3VudHJ5X0EpLCAiOiIpLCAKICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXBfQSwgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShiaG1fQSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfbGFiZGVzY3JpcHRfQSkpIH4gImJvZHkiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAibWluZCIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAiaGVhcnQiLCAKICAgIFRSVUUgfiAib3RoZXIiKSkgJT4lCiAgbXV0YXRlKGJobV9BID0gZmFjdG9yKGJobV9BLCBsZXZlbHMgPSBjKCJib2R5IiwgImhlYXJ0IiwgIm1pbmQiLCAib3RoZXIiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0X0EsIGFzLm51bWVyaWMoYmhtX0EpKSwgeSA9IG1lYW4pKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JfYmhtX0IgfiByZW9yZGVyKGxhYl9BLCBhcy5udW1lcmljKGNvdW50cnlfQSkpLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlX3giKSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gLUluZiwgeG1heCA9IEluZiwgeW1pbiA9IC1JbmYsIHltYXggPSAwLjg1LAogICAgICAgICAgIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuMikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IC1JbmYsIHhtYXggPSBJbmYsIHltaW4gPSAwLjg1LCB5bWF4ID0gMC45NSwKICAgICAgICAgICBmaWxsID0gIiNmZWUwOTAiLCBhbHBoYSA9IDAuMikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IC1JbmYsIHhtYXggPSBJbmYsIHltaW4gPSAwLjk1LCB5bWF4ID0gSW5mLAogICAgICAgICAgIGZpbGwgPSAiI2Y0NmQ0MyIsIGFscGhhID0gMC4yKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC44NSwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTEwIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuOTUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXkxMCIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMywKICAgICAgICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChtZWFuLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICB5ID0gaWZlbHNlKGNpX2xvd2VyIDwgMC4yLCBjaV91cHBlciArIDAuMDUsIGNpX2xvd2VyIC0gMC4wNSksCiAgICAgICAgICAgICAgICB2anVzdCA9IGlmZWxzZShjaV9sb3dlciA8IDAuMiwgMCwgMSkpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMSwgMSwgMC4yKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gZXhwYW5zaW9uKGFkZCA9IDAuMDUpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiLCAiZmlsbCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IDIxOjI1KSArCiAgbGFicyh4ID0gTlVMTCwKICAgICAgIHkgPSBleHByZXNzaW9uKCJTaW1pbGFyaXR5ICIoaXRhbGljKHJbY10pKSkpICsgCiAgZ3VpZGVzKGNvbG9yID0gIm5vbmUiLCBmaWxsID0gIm5vbmUiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IHNjYWxlczo6YWxwaGEoIndoaXRlIiwgMCksIGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpLCAKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYyg1LjUsIDUuNSwgNS41LCAxNS41KSwgInBvaW50IikpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwNF9vYmxpcXVlLnBuZyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwNF9vYmxpcXVlLnBkZiIpCmBgYAoKYGBge3IgYWx0IGZpZyA0LCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41fQojIEZJR1VSRSA0CiMgZmlnLmFzcCBjaG9zZW4gdG8ga2VlcCBhYnNvbHV0ZSBoZWlnaHQgb2YgeS1heGlzIHJlbGF0aXZlbHkgc2ltaWxhciBhY3Jvc3MgYWR1bHRzIGFuZCBjaGlsZHJlbgpjb25nX2RmX2NoaWxkcmVuICU+JQogIG11dGF0ZShyZWdpb25fQSA9IGNhc2Vfd2hlbigKICAgIGNvdW50cnlfQSA9PSAiVVMiIH4gIlNGIEJheSBBcmVhIiwKICAgIGNvdW50cnlfQSA9PSAiR2hhbmEiIH4gIkNhcGUgQ29hc3QiLAogICAgY291bnRyeV9BID09ICJUaGFpbGFuZCIgfiAiQ2hpYW5nIE1haSIsCiAgICBjb3VudHJ5X0EgPT0gIkNoaW5hIiB+ICJTaGFuZ2hhaSIsCiAgICBjb3VudHJ5X0EgPT0gIlZhbnVhdHUiIH4gIlBWICYgTWFsZWt1bGEiKSkgJT4lCiAgbXV0YXRlKHNhbXBsZV9BID0gcGFzdGUoY291bnRyeV9BLCBhZ2VfZ3JvdXBfQSwgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShsYWJfQSA9IHBhc3RlKHBhc3RlMChyZWdpb25fQSwgIiwiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHRvdXBwZXIoY291bnRyeV9BKSwgIjoiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIyBhZ2VfZ3JvdXBfQSwgCiAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShiaG1fQSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfbGFiZGVzY3JpcHRfQSkpIH4gImJvZHkiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAibWluZCIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAiaGVhcnQiLCAKICAgIFRSVUUgfiAib3RoZXIiKSkgJT4lCiAgbXV0YXRlKGJobV9BID0gZmFjdG9yKGJobV9BLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYm9keSIsICJoZWFydCIsICJtaW5kIiwgIm90aGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImJvZHktbGlrZSIsICJoZWFydC1saWtlIiwgIm1pbmQtbGlrZSIsICJvdGhlciIpKSkgJT4lCiAgZ3JvdXBfYnkocmVnaW9uX0EsIGJobV9BKSAlPiUKICB0b3BfbigxLCBtZWFuKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYmhtX0EsCiAgICAgICAgICAgICAjIHggPSByZW9yZGVyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BLCBhcy5udW1lcmljKGJobV9BKSksIAogICAgICAgICAgICAgeSA9IG1lYW4sCiAgICAgICAgICAgICBjb2xvciA9IGJobV9BKSkgKwogIGZhY2V0X2dyaWQoLiB+IHJlb3JkZXIobGFiX0EsIGFzLm51bWVyaWMoY291bnRyeV9BKSkpICsKICAgICAgICAgICAgICMgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjg1LCBsdHkgPSAyLCBzaXplID0gMC4yKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC45NSwgbHR5ID0gMiwgc2l6ZSA9IDAuMikgKyAKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwKICAgICAgICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBUKSArCiAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKG1lYW4sIDIpLCBuc21hbGwgPSAyKSwKICAjICAgICAgICAgICAgICAgeSA9IGlmZWxzZShjaV9sb3dlciA8IDAuMiwgY2lfdXBwZXIgKyAwLjA1LCBjaV9sb3dlciAtIDAuMDUpLAogICMgICAgICAgICAgICAgICB2anVzdCA9IGlmZWxzZShjaV9sb3dlciA8IDAuMiwgMCwgMSkpLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xLCAxLCAwLjIpLAogICAgICAgICAgICAgICAgICAgICAjIGxpbWl0cyA9IGMoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoTkEsIDEpLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBleHBhbnNpb24oYWRkID0gMC4wNSkpICsKICAjIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIikpICsjLCAiZmlsbCIpKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiYmxhY2siLCAiZmlyZWJyaWNrMSIsICJibGFjayIsICJmaXJlYnJpY2s0IikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzAwNzJCMiIsICIjRDU1RTAwIiwgIiM1NkI0RTkiLCAiI0U2OUYwMCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IDIxOjI1KSArCiAgbGFicyh4ID0gTlVMTCwKICAgICAgIHkgPSAiQ29zaW5lIHNpbWlsYXJpdHkgKHJlbGF0aXZlIHRvIGxvY2FsIGFkdWx0cykiLAogICAgICAgY29sb3IgPSAiVHlwZSBvZiBmYWN0b3IiLAogICAgICAgY2FwdGlvbiA9ICJFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIENJcyIpICsKICAgICAgICMgeSA9IGV4cHJlc3Npb24oIkNvc2luZSBzaW1pbGFyaXR5IHJlbGF0aXZlIHRvIGxvY2FsIGFkdWx0cyAiKGl0YWxpYyhyW2NdKSkpKSArIAogICMgZ3VpZGVzKGNvbG9yID0gIm5vbmUiLCBmaWxsID0gIm5vbmUiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBzY2FsZXM6OmFscGhhKCJ3aGl0ZSIsIDApLCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBmYWNlID0gImJvbGQiKSwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNS41LCA1LjUsIDUuNSwgMTUuNSksICJwb2ludCIpKQpgYGAKCmBgYHtyIGFsdCBmaWcgMywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNX0KIyBmaWcuYXNwIGNob3NlbiB0byBrZWVwIGFic29sdXRlIGhlaWdodCBvZiB5LWF4aXMgcmVsYXRpdmVseSBzaW1pbGFyIGFjcm9zcyBhZHVsdHMgYW5kIGNoaWxkcmVuCmNvbmdfZGZfYWR1bHRzICU+JQogIG11dGF0ZShyZWdpb25fQSA9IGNhc2Vfd2hlbigKICAgIGNvdW50cnlfQSA9PSAiVVMiIH4gIlNGIEJheSBBcmVhIiwKICAgIGNvdW50cnlfQSA9PSAiR2hhbmEiIH4gIkNhcGUgQ29hc3QiLAogICAgY291bnRyeV9BID09ICJUaGFpbGFuZCIgfiAiQ2hpYW5nIE1haSIsCiAgICBjb3VudHJ5X0EgPT0gIkNoaW5hIiB+ICJTaGFuZ2hhaSIsCiAgICBjb3VudHJ5X0EgPT0gIlZhbnVhdHUiIH4gIlBWICYgTWFsZWt1bGEiKSkgJT4lCiAgbXV0YXRlKHNhbXBsZV9BID0gcGFzdGUoY291bnRyeV9BLCBhZ2VfZ3JvdXBfQSwgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShsYWJfQSA9IHBhc3RlKHBhc3RlMChyZWdpb25fQSwgIiwiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHRvdXBwZXIoY291bnRyeV9BKSwgIjoiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIyBhZ2VfZ3JvdXBfQSwgCiAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShiaG1fQSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfbGFiZGVzY3JpcHRfQSkpIH4gImJvZHkiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAibWluZCIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAiaGVhcnQiLCAKICAgIFRSVUUgfiAib3RoZXIiKSkgJT4lCiAgbXV0YXRlKGJobV9BID0gZmFjdG9yKGJobV9BLCAKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYm9keSIsICJoZWFydCIsICJtaW5kIiwgIm90aGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImJvZHktbGlrZSIsICJoZWFydC1saWtlIiwgIm1pbmQtbGlrZSIsICJvdGhlciIpKSkgJT4lCiAgZ3JvdXBfYnkocmVnaW9uX0EsIGJobV9BKSAlPiUKICBmaWx0ZXIoY291bnRyeV9CID09ICJVUyIpICU+JQogIHRvcF9uKDEsIG1lYW4pICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBiaG1fQSwKICAgICAgICAgICAgICMgeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0X0EsIGFzLm51bWVyaWMoYmhtX0EpKSwgCiAgICAgICAgICAgICB5ID0gbWVhbiwKICAgICAgICAgICAgIGNvbG9yID0gYmhtX0EpKSArCiAgZmFjZXRfZ3JpZCguIH4gcmVvcmRlcihsYWJfQSwgYXMubnVtZXJpYyhjb3VudHJ5X0EpKSkgKwogICAgICAgICAgICAgIyBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZV94IikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuODUsIGx0eSA9IDIsIHNpemUgPSAwLjIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjk1LCBsdHkgPSAyLCBzaXplID0gMC4yKSArIAogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLAogICAgICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFQpICsKICAjIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobWVhbiwgMiksIG5zbWFsbCA9IDIpLAogICMgICAgICAgICAgICAgICB5ID0gaWZlbHNlKGNpX2xvd2VyIDwgMC4yLCBjaV91cHBlciArIDAuMDUsIGNpX2xvd2VyIC0gMC4wNSksCiAgIyAgICAgICAgICAgICAgIHZqdXN0ID0gaWZlbHNlKGNpX2xvd2VyIDwgMC4yLCAwLCAxKSksIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEsIDEsIDAuMiksCiAgICAgICAgICAgICAgICAgICAgICMgbGltaXRzID0gYygwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYyhOQSwgMSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGV4cGFuc2lvbihhZGQgPSAwLjA1KSkgKwogICMgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBhZXN0aGV0aWNzID0gYygiY29sb3IiKSkgKyMsICJmaWxsIikpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICJmaXJlYnJpY2sxIiwgImJsYWNrIiwgImZpcmVicmljazQiKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMDA3MkIyIiwgIiNENTVFMDAiLCAiIzU2QjRFOSIsICIjRTY5RjAwIikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gMjE6MjUpICsKICBsYWJzKHggPSBOVUxMLAogICAgICAgeSA9ICJDb3NpbmUgc2ltaWxhcml0eSAocmVsYXRpdmUgdG8gVVMgYWR1bHRzKSIsCiAgICAgICBjb2xvciA9ICJUeXBlIG9mIGZhY3RvciIsCiAgICAgICBjYXB0aW9uID0gIkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgQ0lzIikgKwogICAgICAgIyB5ID0gZXhwcmVzc2lvbigiQ29zaW5lIHNpbWlsYXJpdHkgcmVsYXRpdmUgdG8gbG9jYWwgYWR1bHRzICIoaXRhbGljKHJbY10pKSkpICsgCiAgIyBndWlkZXMoY29sb3IgPSAibm9uZSIsIGZpbGwgPSAibm9uZSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IHNjYWxlczo6YWxwaGEoIndoaXRlIiwgMCksIGNvbG9yID0gImJsYWNrIiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpLCAKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYyg1LjUsIDUuNSwgNS41LCAxNS41KSwgInBvaW50IikpCmBgYAoKYGBge3IgYm9keSBtaW5kIGNvbmcgY2hpbGRyZW59CiMgIkluIGVhY2ggc2FtcGxlLCB0aGVyZSB3YXMgYSBmYWN0b3IgdGhhdCB3YXMgbXVjaCBtb3JlIHNpbWlsYXIgdG8gbG9jYWwgYWR1bHRz4oCZIOKAnGJvZHktbGlrZeKAnSBmYWN0b3IuLi4KY29uZ19kZl9jaGlsZHJlbiAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0EpKSwgCiAgICAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0IpKSkKCiMgIi4uLnRoYW4gdGhlaXIg4oCcbWluZC1saWtl4oCdIGZhY3RvciwgLi4uCmNvbmdfZGZfY2hpbGRyZW4gJT4lIAogIGZpbHRlcihncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2JobV9BKSksIAogICAgICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2JobV9CKSkpCgojICIuLi4gYW5kIGEgZmFjdG9yIHRoYXQgd2FzIG11Y2ggbW9yZSBzaW1pbGFyIHRvIGxvY2FsIGFkdWx0c+KAmSDigJxtaW5kLWxpa2XigJ0gZmFjdG9yLi4uCmNvbmdfZGZfY2hpbGRyZW4gJT4lIAogIGZpbHRlcihncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2JobV9BKSksIAogICAgICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2JobV9CKSkpCgojICIuLi50aGFuIHRoZWlyIOKAnGJvZHktbGlrZeKAnSBmYWN0b3IuIgpjb25nX2RmX2NoaWxkcmVuICU+JSAKICBmaWx0ZXIoZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQSkpLCAKICAgICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQikpKQpgYGAKCgojIEFsbCBzYW1wbGVzCgojIyBDb25ncnVlbmNlCgpgYGB7ciBjb25ncnVlbmNlIGFsbCBzYW1wbGVzfQpjb25nX2FsbCA8LSBmYS5jb25ncnVlbmNlKHggPSBsaXN0KGVmYV91c19hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2doX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdGhfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3Z0X2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdXNfY2hpbGRyZW4kbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV90aF9jaGlsZHJlbiRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfY2hpbGRyZW4kbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSA1KSAlPiUKICAjIGdldF91cHBlcl90cmlfZnVuKCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yX0EiKSAlPiUKICBnYXRoZXIoZmFjdG9yX0IsIGNvbmcsIC1mYWN0b3JfQSkgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkEiLCBzZXAgPSAiXyIpKSkpKSAlPiUKICBsZWZ0X2pvaW4oYmluZF9yb3dzKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSksCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkpCmBgYAoKYGBge3IgY29uZyBhbGwgcGFpcnMgZm9ybWF0fQojIG1ha2Ugd2lkZS1mb3JtIHZlcnNpb24gb2YgZGYKY29uZ19hbGxfdyA8LSBjb25nX2FsbCAlPiUKICBzZWxlY3QoZmFjdG9yX0EsIGZhY3Rvcl9CLCBjb25nKSAlPiUKICBzcHJlYWQoZmFjdG9yX0IsIGNvbmcpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiZmFjdG9yX0EiKQoKIyB0cmVhdCBzaW1pbGFyaXR5IG1hdHJpeCBhcyBpZiBpdCB3ZXJlIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXggZm9yIGhjbHVzdApyb3cub3JkZXIgPC0gaGNsdXN0KGFzLmRpc3QoKDEgLSBjb25nX2FsbF93KS8yKSkkb3JkZXIKY29sLm9yZGVyIDwtIGhjbHVzdChhcy5kaXN0KHQoKDEgLSBjb25nX2FsbF93KS8yKSkpJG9yZGVyCgojIHJlLW9yZGVyIG1hdHJpeCBhY2NvcmluZyB0byBjbHVzdGVyaW5nCmNvbmdfYWxsX3cgPC0gY29uZ19hbGxfd1tyb3cub3JkZXIsIGNvbC5vcmRlcl0gCgojIGZvciBzb21lIHJlYXNvbiByZXNoYXBlMjo6bWVsdCgpIHdvcmtzIGJldHRlciB0aGFuIGN1cnJlbnQgdGlkeXZlcnNlIGZ1bmN0aW9ucy4uLgpjb25nX2FsbF9vcmRlcmVkIDwtIG1lbHQoYXMubWF0cml4KGNvbmdfYWxsX3cpKSAlPiUKICByZW5hbWUoZmFjdG9yX0Ffb3JkZXJlZCA9IFZhcjEsIAogICAgICAgICBmYWN0b3JfQl9vcmRlcmVkID0gVmFyMiwKICAgICAgICAgY29uZyA9IHZhbHVlKSAlPiUKICBtdXRhdGUoZmFjdG9yX0EgPSBhcy5jaGFyYWN0ZXIoZmFjdG9yX0Ffb3JkZXJlZCksCiAgICAgICAgIGZhY3Rvcl9CID0gYXMuY2hhcmFjdGVyKGZhY3Rvcl9CX29yZGVyZWQpKSAlPiUKICBmdWxsX2pvaW4oY29uZ19hbGwgJT4lIHNlbGVjdChjb250YWlucygiX0EiKSkgJT4lIGRpc3RpbmN0KCkpICU+JQogIGZ1bGxfam9pbihjb25nX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJfQiIpKSAlPiUgZGlzdGluY3QoKSkgJT4lCiAgbXV0YXRlKGxhYl9BID0gcGFzdGUocGFzdGUoY291bnRyeV9BLCBhZ2VfZ3JvdXBfQSksIGZhY3Rvcl9sYWJkZXNjcmlwdF9BLCBzZXAgPSAiLCAiKSwKICAgICAgICAgbGFiX0IgPSBwYXN0ZShwYXN0ZShjb3VudHJ5X0IsIGFnZV9ncm91cF9CKSwgZmFjdG9yX2xhYmRlc2NyaXB0X0IsIHNlcCA9ICIsICIpKQojIG11dGF0ZShzYW1wbGVfQSA9IHBhc3RlKGNvdW50cnlfQSwgYWdlX2dyb3VwX0EsIHNlcCA9ICIsICIpLAojICAgICAgICBzYW1wbGVfQiA9IHBhc3RlKGNvdW50cnlfQiwgYWdlX2dyb3VwX0IsIHNlcCA9ICIsICIpLAojICAgICAgICBsYWJfQSA9IHBhc3RlKHNhbXBsZV9BLCBmYWN0b3JfbGFiZGVzY3JpcHRfQSwgc2VwID0gIiAiKSwKIyAgICAgICAgbGFiX0IgPSBwYXN0ZShzYW1wbGVfQiwgZmFjdG9yX2xhYmRlc2NyaXB0X0IsIHNlcCA9ICIgIikpCmBgYAoKIyMjIEZpZ3VyZSAyIAoKYGBge3IgY29uZyBhbGwgcGFpcnMgcGxvdCBhLCBmaWcud2lkdGggPSA5LjUsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIDIKY29uZ19sb3dlcl9saW0gPC0gaWZlbHNlKG1pbihjb25nX2FsbF9vcmRlcmVkJGNvbmcpID4gLTAuMDUsIC0wLjA1LCAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjb25nX2FsbF9vcmRlcmVkJGNvbmcpKQojIGNvbmdfcGxvdF9jb2xvcnMgPC0gYygicmVkNCIsICJibHVlNCIsICJkYXJrb3JjaGlkNCIsICJibGFjayIpCiMgY29uZ19wbG90X2NvbG9ycyA8LSBjKCJibGFjayIsICJibGFjayIsICJibGFjayIsICJibGFjayIpCiMgY29uZ19wbG90X2NvbG9ycyA8LSBjKCJyZWQ0IiwgInJlZDQiLCAicmVkNCIsICJibGFjayIpCmNvbmdfcGxvdF9jb2xvcnMgPC0gYygiIzMxMzY5NSIsICIjMzEzNjk1IiwgIiMzMTM2OTUiLCAiYmxhY2siKQoKY29uZ19hbGxfb3JkZXJlZCAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGxhYl9BLCBhcy5udW1lcmljKGZhY3Rvcl9BX29yZGVyZWQpKSwKICAgICAgICAgICAgIHkgPSByZW9yZGVyKGxhYl9CLCBhcy5udW1lcmljKGRlc2MoZmFjdG9yX0Jfb3JkZXJlZCkpKSwKICAgICAgICAgICAgIGZpbGwgPSBjb25nKSkgKyAKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChjb25nLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICBjb2xvciA9IGNhc2Vfd2hlbihjb25nID4gMC44NSB+ICJhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25nID4gMC43NSB+ICJiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmcgPiAwLjY1IH4gImMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJkIikpLAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEYpICsKICAjIGJvZHktbGlrZSBmYWN0b3JzCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gNS41LCB4bWF4ID0gMTUuNSwgeW1pbiA9IDE2LjUsIHltYXggPSAyNi41LAogICAgICAgICAgIGNvbG9yID0gY29uZ19wbG90X2NvbG9yc1sxXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgIyBtaW5kLWxpa2UgZmFjdG9ycwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDE1LjUsIHhtYXggPSAyNS41LCB5bWluID0gNi41LCB5bWF4ID0gMTYuNSwKICAgICAgICAgICBjb2xvciA9IGNvbmdfcGxvdF9jb2xvcnNbMl0sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogICMgaGVhcnQtbGlrZSBmYWN0b3JzCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMjUuNSwgeG1heCA9IDMxLjUsIHltaW4gPSAwLjUsIHltYXggPSA2LjUsCiAgICAgICAgICAgY29sb3IgPSBjb25nX3Bsb3RfY29sb3JzWzNdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICAjIHNjYWxlX2ZpbGxfdmlyaWRpc19jKCN0cmFucyA9IHNjYWxlczo6ZXhwX3RyYW5zKGJhc2UgPSBleHAoMSkpLAogICMgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYyhjb25nX2xvd2VyX2xpbSwgMSksCiAgIyAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoY29uZ19sb3dlcl9saW0sIDEsIDAuMDUpLAogICMgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhmb3JtYXQoc2VxKGNvbmdfbG93ZXJfbGltLCAwLjgsIDAuMDUpLCBuc21hbGwgPSAyKSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuODUgPSBtb2RlcmF0ZSIsICIwLjkwIiwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAjICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJtYWdtYSIsCiAgIyAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDQwKSkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKCN0cmFucyA9IHNjYWxlczo6ZXhwX3RyYW5zKGJhc2UgPSBleHAoMSkpLAogICAgbGltaXRzID0gYyhjb25nX2xvd2VyX2xpbSwgMSksCiAgICBicmVha3MgPSBzZXEoY29uZ19sb3dlcl9saW0sIDEsIDAuMDUpLAogICAgbGFiZWxzID0gYyhmb3JtYXQocm91bmQoc2VxKGNvbmdfbG93ZXJfbGltLCAwLjgsIDAuMDUpLCAyKSwgbnNtYWxsID0gMiksCiAgICAgICAgICAgICAgICIwLjg1ID0gbW9kZXJhdGUiLCAiMC45MCIsCiAgICAgICAgICAgICAgICIwLjk1ID0gaGlnaCIsICIxLjAwIiksCiAgICAjIGNvbG9ycyA9IHZpcmlkaXNMaXRlOjp2aXJpZGlzKDYpLAogICAgIyBjb2xvcnMgPSB2aXJpZGlzTGl0ZTo6aW5mZXJubyg2KSwKICAgIGNvbG9ycyA9IHZpcmlkaXNMaXRlOjptYWdtYSg2KSwKICAgIHZhbHVlcyA9IGMoMCwgMC42NSwgMC43NSwgMC44NSwgMC45NSwgMSksCiAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDQwKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICJibGFjayIsICJibGFjayIsICJncmF5NjAiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dCgKICAgICAgIyBhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSwKICAgICAgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEsCiAgICAgIHNpemUgPSBzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMjAsIDE0KSksCiAgICAgIGNvbG9yID0gY29sb3JfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBjb25nX3Bsb3RfY29sb3JzKSwKICAgICAgZmFjZSAgPSBmYWNlX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BKSksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dCgKICAgICAgc2l6ZSA9IHJldihzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMjAsIDE0KSkpLAogICAgICBjb2xvciA9IHJldihjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpKSwKICAgICAgZmFjZSAgPSByZXYoZmFjZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSkpKSwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMjApLAogICAgIyBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUpLAogICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKAogICAgICBzaXplID0gc2l6ZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDEuNSwgMC41KSksCiAgICAgIGNvbG9yID0gY29sb3JfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBjb25nX3Bsb3RfY29sb3JzKSksCiAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoCiAgICAgIHNpemUgPSByZXYoc2l6ZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDEuNSwgMC41KSkpLAogICAgICBjb2xvciA9IHJldihjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpKSksCiAgICBheGlzLnRpY2tzLmxlbmd0aCA9IHVuaXQoMC4yNSwgImNtIikpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9IGV4cHJlc3Npb24oaXRhbGljKHJbY10pKSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAyX29ibGlxdWUucG5nIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAyX29ibGlxdWUucGRmIikKYGBgCgpgYGB7ciBjb25nIGFsbCBwYWlycyBwbG90IGIsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjh9CiMgRklHVVJFIDIKY29uZ19sb3dlcl9saW0gPC0gaWZlbHNlKG1pbihjb25nX2FsbF9vcmRlcmVkJGNvbmcpID4gLTAuMDUsIC0wLjA1LCAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjb25nX2FsbF9vcmRlcmVkJGNvbmcpKQojIGNvbmdfcGxvdF9jb2xvcnMgPC0gYygicmVkNCIsICJibHVlNCIsICJkYXJrb3JjaGlkNCIsICJibGFjayIpCiMgY29uZ19wbG90X2NvbG9ycyA8LSBjKCJibGFjayIsICJibGFjayIsICJibGFjayIsICJibGFjayIpCmNvbmdfcGxvdF9jb2xvcnMgPC0gYygicmVkNCIsICJyZWQ0IiwgInJlZDQiLCAiYmxhY2siKQoKY29uZ19hbGxfb3JkZXJlZCAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGdzdWIoIlxcOi4qJCIsICIiLCBsYWJfQSksIGFzLm51bWVyaWMoZmFjdG9yX0Ffb3JkZXJlZCkpLAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoZ3N1YigiXFw6LiokIiwgIiIsIGxhYl9CKSwgYXMubnVtZXJpYyhkZXNjKGZhY3Rvcl9CX29yZGVyZWQpKSksCiAgICAgICAgICAgICBmaWxsID0gY29uZykpICsgCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogICMgIyBib2R5LWxpa2UgZmFjdG9ycwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gNS41LCB4bWF4ID0gMTUuNSwgeW1pbiA9IDE2LjUsIHltYXggPSAyNi41LAogICMgICAgICAgICAgY29sb3IgPSBjb25nX3Bsb3RfY29sb3JzWzFdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICAjICMgbWluZC1saWtlIGZhY3RvcnMKICAjIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDE1LjUsIHhtYXggPSAyNS41LCB5bWluID0gNi41LCB5bWF4ID0gMTYuNSwKICAjICAgICAgICAgIGNvbG9yID0gY29uZ19wbG90X2NvbG9yc1syXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgIyAjIGhlYXJ0LWxpa2UgZmFjdG9ycwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMjUuNSwgeG1heCA9IDMxLjUsIHltaW4gPSAwLjUsIHltYXggPSA2LjUsCiAgIyAgICAgICAgICBjb2xvciA9IGNvbmdfcGxvdF9jb2xvcnNbM10sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKCN0cmFucyA9IHNjYWxlczo6ZXhwX3RyYW5zKGJhc2UgPSBleHAoMSkpLAogICAgbGltaXRzID0gYyhjb25nX2xvd2VyX2xpbSwgMSksIAogICAgYnJlYWtzID0gc2VxKGNvbmdfbG93ZXJfbGltLCAxLCAwLjA1KSwKICAgIGxhYmVscyA9IGMoZm9ybWF0KHJvdW5kKHNlcShjb25nX2xvd2VyX2xpbSwgMC44LCAwLjA1KSwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAiMC44NSA9IG1vZGVyYXRlIiwgIjAuOTAiLCAKICAgICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAgIGNvbG9ycyA9IHZpcmlkaXNMaXRlOjp2aXJpZGlzKDYpLAogICAgdmFsdWVzID0gYygwLCAwLjY1LCAwLjc1LCAwLjg1LCAwLjk1LCAxKSwKICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMzApKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImdyYXk2MCIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLAogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsIAogICAgICAgZmlsbCA9ICJDb3NpbmVcbnNpbWlsYXJpdHkiKQogICAgICAgIyBmaWxsID0gZXhwcmVzc2lvbihpdGFsaWMocltjXSkpKQojIGdnc2F2ZSgiLi4vZmlndXJlcy9maWcwMl9vYmxpcXVlLnBuZyIpCmBgYAoKCiMjIEphY2NhcmQgU2ltaWxhcml0eQoKYGBge3IgamFjY2FyZCBhbGwgc2FtcGxlc30Kc3Ryb25nX2xvYWRfYWxsIDwtIGxvYWRpbmdzX2FkdWx0cyAlPiUKICBiaW5kX3Jvd3MobG9hZGluZ3NfY2hpbGRyZW4pICU+JQogIHNlbGVjdChjb3VudHJ5LCBhZ2VfZ3JvdXAsIGZhY3RvciwgY2FwYWNpdHksIGxvYWRpbmcpICU+JQogIG11dGF0ZShzdHJvbmdfbG9hZCA9IGlmZWxzZShsb2FkaW5nID49IDAuNSwgMSwgMCkpICU+JQogIHNlbGVjdCgtbG9hZGluZykKCmNyb3NzX2xvYWRfYWxsIDwtIHN0cm9uZ19sb2FkX2FsbCAlPiUKICBmaWx0ZXIoc3Ryb25nX2xvYWQgPT0gMSkgJT4lCiAgY291bnQoY291bnRyeSwgYWdlX2dyb3VwLCBjYXBhY2l0eSwgc3Ryb25nX2xvYWQpICU+JQogIGZpbHRlcihuID4gMSkgJT4lCiAgbXV0YXRlKGNyb3NzX2xvYWQgPSBUKSAlPiUKICBzZWxlY3QoY291bnRyeSwgYWdlX2dyb3VwLCBjYXBhY2l0eSwgY3Jvc3NfbG9hZCkKCnN0cm9uZ19ub25jcm9zc19sb2FkX2FsbCA8LSBzdHJvbmdfbG9hZF9hbGwgJT4lCiAgbGVmdF9qb2luKGNyb3NzX2xvYWRfYWxsKSAlPiUKICBmaWx0ZXIoaXMubmEoY3Jvc3NfbG9hZCkpCgpqYWNjYXJkX2FsbCA8LSBzdHJvbmdfbm9uY3Jvc3NfbG9hZF9hbGwgJT4lCiAgc2VsZWN0KGZhY3RvciwgY2FwYWNpdHksIHN0cm9uZ19sb2FkKSAlPiUKICBzcHJlYWQoZmFjdG9yLCBzdHJvbmdfbG9hZCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIHQoKSAlPiUKICBkaXN0KG1ldGhvZCA9ICJiaW5hcnkiLCBkaWFnID0gVCwgdXBwZXIgPSBUKSAlPiUKICBhcy5tYXRyaXgoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JfQSIpICU+JQogIGdhdGhlcihmYWN0b3JfQiwgamFjY2FyZCwgLWZhY3Rvcl9BKSAlPiUKICAjIGNvbXB1dGUgc2ltaWxhcml0eSBpbmRleCBpbnN0ZWFkIG9mIGRpc3RhbmNlCiAgbXV0YXRlKGphY2NhcmQgPSAxIC0gamFjY2FyZCkgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkEiLCBzZXAgPSAiXyIpKSkpKSAlPiUKICBsZWZ0X2pvaW4oYmluZF9yb3dzKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSksCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkpCmBgYAoKYGBge3IgamFjY2FyZCBhbGwgcGFpcnMgZm9ybWF0fQojIG1ha2Ugd2lkZS1mb3JtIHZlcnNpb24gb2YgZGYKamFjY2FyZF9hbGxfdyA8LSBqYWNjYXJkX2FsbCAlPiUKICBzZWxlY3QoZmFjdG9yX0EsIGZhY3Rvcl9CLCBqYWNjYXJkKSAlPiUKICBzcHJlYWQoZmFjdG9yX0IsIGphY2NhcmQpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiZmFjdG9yX0EiKQoKIyB0cmVhdCBkaXN0YW5jZSBtYXRyaXggYXMgaWYgaXQgd2VyZSB0aGUgY29ycmVsYXRpb24gbWF0cml4IGZvciBoY2x1c3QKcm93Lm9yZGVyIDwtIGhjbHVzdChhcy5kaXN0KCgxIC0gamFjY2FyZF9hbGxfdykvMikpJG9yZGVyCmNvbC5vcmRlciA8LSBoY2x1c3QoYXMuZGlzdCh0KCgxIC0gamFjY2FyZF9hbGxfdykvMikpKSRvcmRlcgoKIyByZS1vcmRlciBtYXRyaXggYWNjb3JpbmcgdG8gY2x1c3RlcmluZwpqYWNjYXJkX2FsbF93IDwtIGphY2NhcmRfYWxsX3dbcm93Lm9yZGVyLCBjb2wub3JkZXJdIAoKIyBmb3Igc29tZSByZWFzb24gcmVzaGFwZTI6Om1lbHQoKSB3b3JrcyBiZXR0ZXIgdGhhbiBjdXJyZW50IHRpZHl2ZXJzZSBmdW5jdGlvbnMuLi4KamFjY2FyZF9hbGxfb3JkZXJlZCA8LSBtZWx0KGFzLm1hdHJpeChqYWNjYXJkX2FsbF93KSkgJT4lCiAgcmVuYW1lKGZhY3Rvcl9BX29yZGVyZWQgPSBWYXIxLCAKICAgICAgICAgZmFjdG9yX0Jfb3JkZXJlZCA9IFZhcjIsCiAgICAgICAgIGphY2NhcmQgPSB2YWx1ZSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9BID0gYXMuY2hhcmFjdGVyKGZhY3Rvcl9BX29yZGVyZWQpLAogICAgICAgICBmYWN0b3JfQiA9IGFzLmNoYXJhY3RlcihmYWN0b3JfQl9vcmRlcmVkKSkgJT4lCiAgZnVsbF9qb2luKGphY2NhcmRfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoIl9BIikpICU+JSBkaXN0aW5jdCgpKSAlPiUKICBmdWxsX2pvaW4oamFjY2FyZF9hbGwgJT4lIHNlbGVjdChjb250YWlucygiX0IiKSkgJT4lIGRpc3RpbmN0KCkpICU+JQogIG11dGF0ZShsYWJfQSA9IHBhc3RlKHBhc3RlKGNvdW50cnlfQSwgYWdlX2dyb3VwX0EpLCBmYWN0b3JfbGFiZGVzY3JpcHRfQSwgc2VwID0gIiwgIiksCiAgICAgICAgIGxhYl9CID0gcGFzdGUocGFzdGUoY291bnRyeV9CLCBhZ2VfZ3JvdXBfQiksIGZhY3Rvcl9sYWJkZXNjcmlwdF9CLCBzZXAgPSAiLCAiKSkKIyBtdXRhdGUoc2FtcGxlX0EgPSBwYXN0ZShjb3VudHJ5X0EsIGFnZV9ncm91cF9BLCBzZXAgPSAiLCAiKSwKIyAgICAgICAgc2FtcGxlX0IgPSBwYXN0ZShjb3VudHJ5X0IsIGFnZV9ncm91cF9CLCBzZXAgPSAiLCAiKSwKIyAgICAgICAgbGFiX0EgPSBwYXN0ZShzYW1wbGVfQSwgZmFjdG9yX2xhYmRlc2NyaXB0X0EsIHNlcCA9ICIgIiksCiMgICAgICAgIGxhYl9CID0gcGFzdGUoc2FtcGxlX0IsIGZhY3Rvcl9sYWJkZXNjcmlwdF9CLCBzZXAgPSAiICIpKQpgYGAKCiMjIyBGaWd1cmUgUzEKCmBgYHtyIGphY2NhcmQgYWxsIHBhaXJzIHBsb3QsIGZpZy53aWR0aCA9IDkuNSwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgUzEKamFjY2FyZF9sb3dlcl9saW0gPC0gaWZlbHNlKG1pbihqYWNjYXJkX2FsbF9vcmRlcmVkJGphY2NhcmQpID4gMCwgMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW4oamFjY2FyZF9hbGxfb3JkZXJlZCRqYWNjYXJkKSkKIyBqYWNjYXJkX3Bsb3RfY29sb3JzIDwtIGMoInJlZDQiLCAiYmx1ZTQiLCAiZGFya29yY2hpZDQiLCAiYmxhY2siKQojIGphY2NhcmRfcGxvdF9jb2xvcnMgPC0gYygiYmxhY2siLCAiYmxhY2siLCAiYmxhY2siLCAiYmxhY2siKQpqYWNjYXJkX3Bsb3RfY29sb3JzIDwtIGMoInJlZDQiLCAicmVkNCIsICJyZWQ0IiwgImJsYWNrIikKCmphY2NhcmRfYWxsX29yZGVyZWQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihsYWJfQSwgYXMubnVtZXJpYyhmYWN0b3JfQV9vcmRlcmVkKSksCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihsYWJfQiwgYXMubnVtZXJpYyhkZXNjKGZhY3Rvcl9CX29yZGVyZWQpKSksCiAgICAgICAgICAgICBmaWxsID0gamFjY2FyZCkpICsgCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjYXNlX3doZW4oCiAgICAjIGphY2NhcmQgJWluJSBjKDAsIDEpIH4gZm9ybWF0KHJvdW5kKGphY2NhcmQsIDApLCBuc21hbGwgPSAwKSwKICAgIFRSVUUgfiBmb3JtYXQocm91bmQoamFjY2FyZCwgMiksIG5zbWFsbCA9IDIpKSwKICAgIGNvbG9yID0gY2FzZV93aGVuKGphY2NhcmQgPj0gMC43NSB+ICJhIiwgCiAgICAgICAgICAgICAgICAgICAgICBqYWNjYXJkID49IDAuNSB+ICJiIiwKICAgICAgICAgICAgICAgICAgICAgIGphY2NhcmQgPj0gMC4yNSB+ICJjIiwKICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiZCIpKSwKICAgIHNob3cubGVnZW5kID0gRikgKwogICMgbWluZC1saWtlIGFuZCBvdGhlciBmYWN0b3JzCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMC41LCB4bWF4ID0gMTQuNSwgeW1pbiA9IDE3LjUsIHltYXggPSAzMS41LAogICAgICAgICAgIGNvbG9yID0gamFjY2FyZF9wbG90X2NvbG9yc1syXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgIyBib2R5LWxpa2UgZmFjdG9ycwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDE0LjUsIHhtYXggPSAyNC41LCB5bWluID0gNy41LCB5bWF4ID0gMTcuNSwKICAgICAgICAgICBjb2xvciA9IGphY2NhcmRfcGxvdF9jb2xvcnNbMV0sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogICMgaGVhcnQtbGlrZSBmYWN0b3JzCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMjQuNSwgeG1heCA9IDMxLjUsIHltaW4gPSAwLjUsIHltYXggPSA3LjUsCiAgICAgICAgICAgY29sb3IgPSBqYWNjYXJkX3Bsb3RfY29sb3JzWzNdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICBzY2FsZV9maWxsX3ZpcmlkaXNfYygjdHJhbnMgPSBzY2FsZXM6OmV4cF90cmFucyhiYXNlID0gZXhwKDEpKSwKICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKGphY2NhcmRfbG93ZXJfbGltLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoamFjY2FyZF9sb3dlcl9saW0sIDEsIDAuMDUpLAogICAgICAgICAgICAgICAgICAgICAgICMgbGFiZWxzID0gYyhmb3JtYXQoc2VxKGphY2NhcmRfbG93ZXJfbGltLCAwLjgsIDAuMDUpLCAKICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAiMC44NSA9IG1vZGVyYXRlIiwgIjAuOTAiLAogICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAiMC45NSA9IGhpZ2giLCAiMS4wMCIpLAogICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJ2aXJpZGlzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3Rpb24gPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDQwKSkgKwogICMgc2NhbGVfZmlsbF9ncmFkaWVudG4oI3RyYW5zID0gc2NhbGVzOjpleHBfdHJhbnMoYmFzZSA9IGV4cCgxKSksCiAgIyAgIGxpbWl0cyA9IGMoamFjY2FyZF9sb3dlcl9saW0sIDEpLCAKICAjICAgYnJlYWtzID0gc2VxKGphY2NhcmRfbG93ZXJfbGltLCAxLCAwLjA1KSwKICAjICAgbGFiZWxzID0gYyhmb3JtYXQoc2VxKGphY2NhcmRfbG93ZXJfbGltLCAwLjgsIDAuMDUpLCBuc21hbGwgPSAyKSwKICAjICAgICAgICAgICAgICAiMC44NSA9IG1vZGVyYXRlIiwgIjAuOTAiLCAKICAjICAgICAgICAgICAgICAiMC45NSA9IGhpZ2giLCAiMS4wMCIpLAogICMgICBjb2xvcnMgPSB2aXJpZGlzTGl0ZTo6dmlyaWRpcyg2KSwKICAjICAgdmFsdWVzID0gYygwLCAwLjY1LCAwLjc1LCAwLjg1LCAwLjk1LCAxKSwKICAjICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA0MCkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiYmxhY2siLCAiYmxhY2siLCAiYmxhY2siLCAiZ3JheTYwIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKAogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoCiAgICAgICMgYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEsCiAgICAgIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxLAogICAgICBzaXplID0gc2l6ZV9mdW4oamFjY2FyZF9hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDIwLCAxNCkpLAogICAgICBjb2xvciA9IGNvbG9yX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gamFjY2FyZF9wbG90X2NvbG9ycyksCiAgICAgIGZhY2UgID0gZmFjZV9mdW4oamFjY2FyZF9hbGxfb3JkZXJlZCRsYWJfQSkpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoCiAgICAgIHNpemUgPSByZXYoc2l6ZV9mdW4oamFjY2FyZF9hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDIwLCAxNCkpKSwKICAgICAgY29sb3IgPSByZXYoY29sb3JfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBqYWNjYXJkX3Bsb3RfY29sb3JzKSksCiAgICAgIGZhY2UgID0gcmV2KGZhY2VfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EpKSksCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIwKSwKICAgICMgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZShzaXplID0gMC41KSwKICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfbGluZSgKICAgICAgc2l6ZSA9IHNpemVfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygxLjUsIDAuNSkpLAogICAgICBjb2xvciA9IGNvbG9yX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gamFjY2FyZF9wbG90X2NvbG9ycykpLAogICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9saW5lKAogICAgICBzaXplID0gcmV2KHNpemVfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygxLjUsIDAuNSkpKSwKICAgICAgY29sb3IgPSByZXYoY29sb3JfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBqYWNjYXJkX3Bsb3RfY29sb3JzKSkpLAogICAgYXhpcy50aWNrcy5sZW5ndGggPSB1bml0KDAuMjUsICJjbSIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsIGZpbGwgPSAiSmFjY2FyZFxuc2ltaWxhcml0eSIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDFfb2JsaXF1ZS5wbmciKQpgYGAKCiMjIERldmVsb3BtZW50YWwgY29tcGFyaXNvbnMKCiMjIyBGaWd1cmVzIFM2LVMxMAoKYGBge3IgZGV2IGNvbXAgYWxsIHNpdGVzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMS4yfQojIEZJR1VSRSBTNiwgRklHVVJFIFM3LCBGSUdVUkUgUzgsIEZJR1VSRSBTOSwgRklHVVJFIFMxMApwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bigKICBlZmFfbGlzdCA9IGxpc3QoZWZhX3VzX2FkdWx0cywgZWZhX3VzX2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogIGRldl9jb25nX3Bsb3RfZnVuKGNvbmdfZGZfY2hpbGRyZW4sIHdoaWNoX2NvdW50cnkgPSAiVVMiLCBwYWRkaW5nID0gVCksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygyLCAxLjUpLCBsYWJlbHMgPSAiQVVUTyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDZfb2JsaXF1ZS5wbmciKQoKcGxvdF9ncmlkKGhlYXRtYXBfY29tcF9mdW4oCiAgZWZhX2xpc3QgPSBsaXN0KGVmYV9naF9hZHVsdHMsIGVmYV9naF9jaGlsZHJlbiksIHBhZGRpbmcgPSBGKSwKICBkZXZfY29uZ19wbG90X2Z1bihjb25nX2RmX2NoaWxkcmVuLCB3aGljaF9jb3VudHJ5ID0gIkdoYW5hIiwgcGFkZGluZyA9IFQpLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMiwgMS41KSwgbGFiZWxzID0gIkFVVE8iKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzA3X29ibGlxdWUucG5nIikKCnBsb3RfZ3JpZChoZWF0bWFwX2NvbXBfZnVuKAogIGVmYV9saXN0ID0gbGlzdChlZmFfdGhfYWR1bHRzLCBlZmFfdGhfY2hpbGRyZW4pLCBwYWRkaW5nID0gRiksCiAgZGV2X2NvbmdfcGxvdF9mdW4oY29uZ19kZl9jaGlsZHJlbiwgd2hpY2hfY291bnRyeSA9ICJUaGFpbGFuZCIsIHBhZGRpbmcgPSBUKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwOF9vYmxpcXVlLnBuZyIpCgpwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bigKICBlZmFfbGlzdCA9IGxpc3QoZWZhX2NoX2FkdWx0cywgZWZhX2NoX2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogIGRldl9jb25nX3Bsb3RfZnVuKGNvbmdfZGZfY2hpbGRyZW4sIHdoaWNoX2NvdW50cnkgPSAiQ2hpbmEiLCBwYWRkaW5nID0gVCksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygyLCAxLjUpLCBsYWJlbHMgPSAiQVVUTyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDlfb2JsaXF1ZS5wbmciKQoKcGxvdF9ncmlkKGhlYXRtYXBfY29tcF9mdW4oCiAgZWZhX2xpc3QgPSBsaXN0KGVmYV92dF9hZHVsdHMsIGVmYV92dF9jaGlsZHJlbiksIHBhZGRpbmcgPSBGKSwKICBkZXZfY29uZ19wbG90X2Z1bihjb25nX2RmX2NoaWxkcmVuLCB3aGljaF9jb3VudHJ5ID0gIlZhbnVhdHUiLCBwYWRkaW5nID0gVCksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygyLCAxLjUpLCBsYWJlbHMgPSAiQVVUTyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMTBfb2JsaXF1ZS5wbmciKQpgYGAKIyMjIEZpZ3VyZSAxLCB2ZXJzaW9uIDEKCmBgYHtyIGxvYWRpbmdzIGFsbCBzYW1wbGVzLCBmaWcud2lkdGggPSA2LjUsIGZpZy5hc3AgPSAwLjZ9CiMgRklHVVJFIDEsIHZlcnNpb24gMQpoZWF0bWFwX2NvbXBfZnVuKGxpc3QoZWZhX3VzX2FkdWx0cywgZWZhX2doX2FkdWx0cywgZWZhX3RoX2FkdWx0cywgCiAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfYWR1bHRzLCBlZmFfdnRfYWR1bHRzLCAKICAgICAgICAgICAgICAgICAgICAgIGVmYV91c19jaGlsZHJlbiwgZWZhX2doX2NoaWxkcmVuLCBlZmFfdGhfY2hpbGRyZW4sIAogICAgICAgICAgICAgICAgICAgICAgZWZhX2NoX2NoaWxkcmVuLCBlZmFfdnRfY2hpbGRyZW4pLCAKICAgICAgICAgICAgICAgICBmYWNldF9vcmRlcl92YXJzID0gYygiYWdlX2dyb3VwIiwgImNvdW50cnkiLCAiZm51bSIpLAogICAgICAgICAgICAgICAgIGZhY2V0X2xhYl9zcGxpdCA9IFQpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nLnggPSB1bml0KGMocmVwKDAuMiwgNCksIDEsIHJlcCgwLjIsIDQpKSwgImxpbmUiKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIoYmFyd2lkdGggPSAzMCwgYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkZhY3RvciBsb2FkaW5nIiwgdGl0bGUudmp1c3QgPSAxKSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAxdjFfb2JsaXF1ZS5wbmciKQpgYGAKCmBgYHtyIGRvbWluYW50IGZhY3RvciwgZmlnLndpZHRoID0gNi41LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gRn0KIyBoaWdobGlnaHRpbmcgZG9taW5hbnQgZmFjdG9yIChpZ25vcmluZyBjcm9zcy1sb2FkaW5ncyA+IDAuMDUpCmxvYWRpbmdzX2FsbCA8LSBsb2FkaW5nc19hZHVsdHMgJT4lCiAgc2VsZWN0KC1jb250YWlucygib3JkIikpICU+JQogIGZ1bGxfam9pbihsb2FkaW5nc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLWNvbnRhaW5zKCJvcmQiKSkpCgpkb21fZmFjdG9yc19hbGwgPC0gbG9hZGluZ3NfYWxsICU+JQogIGdyb3VwX2J5KGNvdW50cnksIGFnZV9ncm91cCwgY2FwYWNpdHkpICU+JSAKICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoY291bnRyeSwgYWdlX2dyb3VwLCBjYXBhY2l0eSwgZmFjdG9yLCBsb2FkaW5nKSAlPiUKICByZW5hbWUoZG9tX2ZhY3RvciA9IGZhY3RvciwKICAgICAgICAgZG9tX2xvYWRpbmcgPSBsb2FkaW5nKQoKcmVjdF9kZiA8LSBsb2FkaW5nc19hbGwgJT4lCiAgZnVsbF9qb2luKGRvbV9mYWN0b3JzX2FsbCkgJT4lCiAgbXV0YXRlKGZudW0gPSBnc3ViKCIuKl9GIiwgIkYiLCBmYWN0b3IpKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJmYWN0b3IiKSkgJT4lCiAgc3ByZWFkKGZudW0sIGxvYWRpbmcpICU+JQogIG11dGF0ZShkaWZmMSA9IGFicyhkb21fbG9hZGluZykgLSBhYnMoRjEpLAogICAgICAgICBkaWZmMiA9IGFicyhkb21fbG9hZGluZykgLSBhYnMoRjIpLAogICAgICAgICBkaWZmMyA9IGFicyhkb21fbG9hZGluZykgLSBhYnMoRjMpLAogICAgICAgICBkaWZmNCA9IGFicyhkb21fbG9hZGluZykgLSBhYnMoRjQpKSAlPiUKICBzZWxlY3QoLWMoZG9tX2xvYWRpbmcsIHN0YXJ0c193aXRoKCJGIikpKSAlPiUKICBnYXRoZXIod2hpY2hfZGlmZiwgZGlmZiwgc3RhcnRzX3dpdGgoImRpZmYiKSkgJT4lCiAgZmlsdGVyKGRpZmYgIT0gMCwgIWlzLm5hKGRpZmYpKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCBhZ2VfZ3JvdXAsIGNhcGFjaXR5KSAlPiUKICB0b3BfbigtMSwgZGlmZikgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShhbnlfc21hbGwgPSBkaWZmIDwgMC4wNSkgJT4lCiAgcmVuYW1lKGZhY3RvciA9IGRvbV9mYWN0b3IpICU+JQogIGxlZnRfam9pbihmdWxsX2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cywgZmFjdG9yX25hbWVzX2NoaWxkcmVuKSkKCiMgYW5hbG9nIHRvIEZJR1VSRSAxCnRlbXBfY2FwX29yZGVyIDwtIGZhLnNvcnQoZWZhX3VzX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKSAlPiUgcmV2KCkKCmdncGxvdChyZWN0X2RmICU+JQogICAgICAgICBmaWx0ZXIoIWlzLm5hKGFueV9zbWFsbCkpICU+JQogICAgICAgICBtdXRhdGUoY2FwYWNpdHkgPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IHRlbXBfY2FwX29yZGVyKSksCiAgICAgICBhZXMoeCA9IGZhY3Rvcl9sYWJkZXNjcmlwdCwgCiAgICAgICAgICAgeSA9IGNhcGFjaXR5LCAKICAgICAgICAgICBmaWxsID0gYW55X3NtYWxsKSkgKwogIGZhY2V0X2dyaWQofiBpbnRlcmFjdGlvbihjb3VudHJ5LCBhZ2VfZ3JvdXApLCBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHRoZW1lKHBhbmVsLnNwYWNpbmcueCA9IHVuaXQoYyhyZXAoMC4yLCA0KSwgMSwgcmVwKDAuMiwgNCkpLCAibGluZSIpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikKIyBnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDF2Ml9vYmxpcXVlLnBuZyIpCmBgYAoKIyMjIEZpZ3VyZSAxLCB2ZXJzaW9uIDIgKGluY2x1ZGVkIGluIG1haW4gdGV4dCkKCmBgYHtyIGxvYWRpbmdzIGFsbCBzYW1wbGVzIHYyYSwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNn0KIyBGSUdVUkUgMSwgdmVyc2lvbiAyIChpbmNsdWRlZCBpbiBtYWluIHRleHQpCmxvYWRpbmdzX2FkdWx0cyAlPiUKICBiaW5kX3Jvd3MobG9hZGluZ3NfY2hpbGRyZW4pICU+JQogICMgc2VsZWN0KC1jb250YWlucygiX29yZCIpKSAlPiUKICBtdXRhdGUoZmFjdG9yX2JobSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHQpKSB+ICJCT0RZLWxpa2UgZmFjdG9ycyIsCiAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0KSkgfiAiTUlORC1saWtlIGZhY3RvcnMiLAogICAgZ3JlcGwoImhlYXJ0IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHQpKSB+ICJIRUFSVC1saWtlIGZhY3RvcnMiLAogICAgVFJVRSB+ICJPdGhlciIpKSAlPiUKICBsZWZ0X2pvaW4oc3Ryb25nX25vbmNyb3NzX2xvYWRfYWxsICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoZmFjdG9yLCBjYXBhY2l0eSwgc3Ryb25nX2xvYWQsIGNyb3NzX2xvYWQpKSAlPiUKICBtdXRhdGUoZm9udF9mYWNlID0gY2FzZV93aGVuKAogICAgc3Ryb25nX2xvYWQgPT0gMSAmIGlzLm5hKGNyb3NzX2xvYWQpIH4gImJvbGQiLAogICAgVFJVRSB+ICJwbGFpbiIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHBhc3RlKGdzdWIoIkZhY3RvciAiLCAiRiIsIGZhY3Rvcl9uYW1lKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfZGVzY3JpcHQsIHNlcCA9ICI6ICIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGFzLm51bWVyaWMoY291bnRyeSkpLCAKICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5X29yZF91cywgZGVzYyhjYXBhY2l0eV9vcmRfdXMpKSwKICAgICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoZmFjdG9yX2JobSwgYWdlX2dyb3VwKSwgCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpLCAKICAgICAgICAgICAgICAgIGZvbnRmYWNlID0gZm9udF9mYWNlKSwgc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBwYW5lbC5zcGFjaW5nLnggPSB1bml0KGMoMC4yLCAxLCAwLjIsIDEsIDAuMiwgMSwgMC4yKSwgImxpbmUiKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIoYmFyd2lkdGggPSAzMCwgYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIkZhY3RvciBsb2FkaW5nIiwgdGl0bGUudmp1c3QgPSAxKSkKICAjIHNlbGVjdChjb3VudHJ5LCBjYXBhY2l0eSwgbG9hZGluZykgJT4lCiAgIyBtdXRhdGUobG9hZGluZyA9IHJvdW5kKGxvYWRpbmcsIDIpKSAlPiUKICAjIHNwcmVhZChjb3VudHJ5LCBsb2FkaW5nKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDF2Ml9vYmxpcXVlLnBuZyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwMXYyX29ibGlxdWUucGRmIikKYGBgCmBgYHtyIGxvYWRpbmdzIGFsbCBzYW1wbGVzIHYyYiwgZmlnLndpZHRoID0gNC41LCBmaWcuYXNwID0gMC42fQojIEZJR1VSRSAxLCB2ZXJzaW9uIDIgKGFkdWx0cyBvbmx5KQpsb2FkaW5nc19hZHVsdHMgJT4lCiAgIyBiaW5kX3Jvd3MobG9hZGluZ3NfY2hpbGRyZW4pICU+JQogICMgc2VsZWN0KC1jb250YWlucygiX29yZCIpKSAlPiUKICBtdXRhdGUoZmFjdG9yX2JobSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHQpKSB+ICJCT0RZLWxpa2UgZmFjdG9ycyIsCiAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0KSkgfiAiTUlORC1saWtlIGZhY3RvcnMiLAogICAgZ3JlcGwoImhlYXJ0IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHQpKSB+ICJIRUFSVC1saWtlIGZhY3RvcnMiLAogICAgVFJVRSB+ICJPdGhlciIpKSAlPiUKICBsZWZ0X2pvaW4oc3Ryb25nX25vbmNyb3NzX2xvYWRfYWxsICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoZmFjdG9yLCBjYXBhY2l0eSwgc3Ryb25nX2xvYWQsIGNyb3NzX2xvYWQpKSAlPiUKICBtdXRhdGUoZm9udF9mYWNlID0gY2FzZV93aGVuKAogICAgc3Ryb25nX2xvYWQgPT0gMSAmIGlzLm5hKGNyb3NzX2xvYWQpIH4gImJvbGQiLAogICAgVFJVRSB+ICJwbGFpbiIpKSAlPiUKICBtdXRhdGUocmVnaW9uID0gY2FzZV93aGVuKAogICAgY291bnRyeSA9PSAiVVMiIH4gIlNGIEJheSBBcmVhIiwKICAgIGNvdW50cnkgPT0gIkdoYW5hIiB+ICJDYXBlIENvYXN0IiwKICAgIGNvdW50cnkgPT0gIlRoYWlsYW5kIiB+ICJDaGlhbmcgTWFpIiwKICAgIGNvdW50cnkgPT0gIkNoaW5hIiB+ICJTaGFuZ2hhaSIsCiAgICBjb3VudHJ5ID09ICJWYW51YXR1IiB+ICJQViAmIE1hbGVrdWxhIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIocGFzdGUwKHJlZ2lvbiwgIiwgIiwgdG91cHBlcihjb3VudHJ5KSksCiAgICAgICAgICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGNvdW50cnkpKSwKICAgICAgICAgICAgICMgeCA9IGNvdW50cnksCiAgICAgICAgICAgICAjIHggPSByZW9yZGVyKHBhc3RlKGdzdWIoIkZhY3RvciAiLCAiRiIsIGZhY3Rvcl9uYW1lKSwgCiAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9kZXNjcmlwdCwgc2VwID0gIjogIiksIAogICAgICAgICAgICAgIyAgICAgICAgICAgICBhcy5udW1lcmljKGNvdW50cnkpKSwgCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eV9vcmRfdXMsIGRlc2MoY2FwYWNpdHlfb3JkX3VzKSksCiAgICAgICAgICAgICBmaWxsID0gbG9hZGluZykpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKGZhY3Rvcl9iaG0pLCAjLCBhZ2VfZ3JvdXApLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMiksIAogICAgICAgICAgICAgICAgZm9udGZhY2UgPSBmb250X2ZhY2UpLCBzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwKICAgICAgICAjIHBhbmVsLnNwYWNpbmcueCA9IHVuaXQoYygwLjIsIDEsIDAuMiwgMSwgMC4yLCAxLCAwLjIpLCAibGluZSIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogICMgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvcmJhcihiYXJ3aWR0aCA9IDAuNSwgYmFyaGVpZ2h0ID0gMjAsIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJGYWN0b3IgbG9hZGluZyIsIHRpdGxlLnZqdXN0ID0gMSkpCiAgIyBzZWxlY3QoY291bnRyeSwgY2FwYWNpdHksIGxvYWRpbmcpICU+JQogICMgbXV0YXRlKGxvYWRpbmcgPSByb3VuZChsb2FkaW5nLCAyKSkgJT4lCiAgIyBzcHJlYWQoY291bnRyeSwgbG9hZGluZykKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAxdjJfb2JsaXF1ZV9hZHVsdHMucG5nIikKYGBgCgojIyBWYXJpYW5jZSBhY2NvdW50ZWQgZm9yCgpgYGB7cn0KVmFjY291bnRlZF9mdW4gPC0gZnVuY3Rpb24oZWZhX25hbWUpIHsKICBjb3VudHJ5IDwtIGdzdWIoImVmYV8iLCAiIiwgZWZhX25hbWUpCiAgY291bnRyeSA8LSBnc3ViKCJfLiokIiwgIiIsIGNvdW50cnkpCiAgYWdlX2dyb3VwIDwtIGNhc2Vfd2hlbihncmVwbCgiYWR1bHQiLCBlZmFfbmFtZSkgfiAiYWR1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJjaGlsZCIsIGVmYV9uYW1lKSB+ICJjaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykKICAKICBlZmEgPC0gZ2V0KGVmYV9uYW1lKQogIHJlcyA8LSBlZmEkVmFjY291bnRlZCAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigibWV0cmljIikgJT4lCiAgICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCwgbGV2ZWxzID0gYygiYWR1bHRzIiwgImNoaWxkcmVuIikpKQogIAogIHJldHVybihyZXMpCn0KYGBgCgpgYGB7cn0KVmFjY291bnRlZF9hbGwgPC0gVmFjY291bnRlZF9mdW4oImVmYV91c19hZHVsdHMiKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV9naF9hZHVsdHMiKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfdGhfYWR1bHRzIikpICU+JQogIGZ1bGxfam9pbihWYWNjb3VudGVkX2Z1bigiZWZhX2NoX2FkdWx0cyIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV92dF9hZHVsdHMiKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfdXNfY2hpbGRyZW4iKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfZ2hfY2hpbGRyZW4iKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfdGhfY2hpbGRyZW4iKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfY2hfY2hpbGRyZW4iKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfdnRfY2hpbGRyZW4iKSkKYGBgCgpgYGB7cn0KVmFjY291bnRlZF9hbGwgJT4lCiAgZmlsdGVyKG1ldHJpYyAlaW4lIGMoIlByb3BvcnRpb24gVmFyIiwgIlByb3BvcnRpb24gRXhwbGFpbmVkIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHZhbHVlLCBzdGFydHNfd2l0aCgiRiIpKSAlPiUKICBtdXRhdGUodmFsdWUgPSByb3VuZCh2YWx1ZSwgMikpICU+JQogIHNwcmVhZChjb3VudHJ5LCB2YWx1ZSkgJT4lCiAgYXJyYW5nZShhZ2VfZ3JvdXAsIGZhY3RvciwgbWV0cmljKQpgYGAKYGBge3J9ClZhY2NvdW50ZWRfYWxsICU+JQogIGZpbHRlcihtZXRyaWMgPT0gIkN1bXVsYXRpdmUgVmFyIikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgdmFsdWUsIHN0YXJ0c193aXRoKCJGIikpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIGFnZV9ncm91cCkgJT4lCiAgdG9wX24oMSwgdmFsdWUpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodmFsdWUgPSByb3VuZCh2YWx1ZSwgMikpICU+JQogIHNlbGVjdChtZXRyaWMsIGNvdW50cnksIGFnZV9ncm91cCwgdmFsdWUpICU+JQogIHNwcmVhZChjb3VudHJ5LCB2YWx1ZSkgJT4lCiAgYXJyYW5nZShhZ2VfZ3JvdXAsIG1ldHJpYykKYGBgCgojIyBJbnRlcmZhY3RvciBjb3JyZWxhdGlvbnMKCmBgYHtyLCBpbmNsdWRlID0gRn0KaW50ZXJmYWN0b3JfY29yX2Z1biA8LSBmdW5jdGlvbihlZmFfbmFtZSkgewogIHNhbXBsZSA9IGdzdWIoImVmYV8iLCAiIiwgZWZhX25hbWUpCiAgY291bnRyeSA9IGdzdWIoIl8uKiQiLCAiIiwgc2FtcGxlKQogIGFnZV9ncm91cCA9IGdzdWIoIl4uKl8iLCAiIiwgc2FtcGxlKQogIAogIGVmYSA8LSBnZXQoZWZhX25hbWUpCiAgCiAgIyBoYWNreSwgbm90IHN1cmUgd2h5IHRoaXMgd29ya3MsIGJ1dCBpdCdzIHRoZSBvbmx5IHdheSBpIGNvdWxkIGdldCBDSXMKICBkZiA8LSBwcmludChlZmEpICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JfcGFpciIpICU+JQogICAgc2VwYXJhdGUoZmFjdG9yX3BhaXIsIGMoImZhY3Rvcl9BIiAsImZhY3Rvcl9CIiksIHNlcCA9ICItIikgJT4lCiAgICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiZmFjdG9yIikpLCB+IGdzdWIoIl4uKl8iLCAiIiwgLikpCiAgCiAgIyBkZiA8LSBlZmEkUGhpICU+JQogICMgICBkYXRhLmZyYW1lKCkgJT4lCiAgIyAgIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yX0EiKQogICMgZ2F0aGVyKGZhY3Rvcl9CLCBwaGksIC1mYWN0b3JfQSkKICAKICBkZiA8LSBkZiAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiZmFjdG9yIikpLAogICAgICAgICAgICB+IHBhc3RlMChjb3VudHJ5LCB0b3VwcGVyKGFnZV9ncm91cCksICJfIiwgLikpICU+JQogICAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCwgbGV2ZWxzID0gYygiYWR1bHRzIiwgImNoaWxkcmVuIikpKQogIAogIHJldHVybihkZikKfQpgYGAKCmBgYHtyLCByZXN1bHRzID0gImhpZGUiLCAsIGluY2x1ZGUgPSBGfQpkX3BoaSA8LSBiaW5kX3Jvd3MoaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX3VzX2FkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX2doX2FkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX3RoX2FkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX2NoX2FkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX3Z0X2FkdWx0cyIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX3VzX2NoaWxkcmVuIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfZ2hfY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgICAgIGludGVyZmFjdG9yX2Nvcl9mdW4oImVmYV90aF9jaGlsZHJlbiIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX2NoX2NoaWxkcmVuIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfdnRfY2hpbGRyZW4iKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfcGhpIDwtIGRfcGhpICU+JQogIGZ1bGxfam9pbihkX3BoaSAlPiUKICAgICAgICAgICAgICByZW5hbWVfYWxsKH4gZ3N1YigiZmFjdG9yX0EiLCAiZmFjdG9yX0MiLCAuKSkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lX2FsbCh+IGdzdWIoImZhY3Rvcl9CIiwgImZhY3Rvcl9EIiwgLikpICU+JQogICAgICAgICAgICAgIHJlbmFtZV9hbGwofiBnc3ViKCJmYWN0b3JfRCIsICJmYWN0b3JfQSIsIC4pKSAlPiUKICAgICAgICAgICAgICByZW5hbWVfYWxsKH4gZ3N1YigiZmFjdG9yX0MiLCAiZmFjdG9yX0IiLCAuKSkpICU+JSBkaXN0aW5jdCgpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3BoaSA8LSBkX3BoaSAlPiUKICBzZWxlY3QoLWNvdW50cnksIC1hZ2VfZ3JvdXApICU+JQogIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzICU+JQogICAgICAgICAgICAgIGZ1bGxfam9pbihmYWN0b3JfbmFtZXNfY2hpbGRyZW4pICU+JQogICAgICAgICAgICAgIHJlbmFtZV9hbGwofnBhc3RlMCguLCAiX0EiKSkpICU+JQogIG11dGF0ZShmYWN0b3JfYmhtX0EgPSBjYXNlX3doZW4oCiAgICBncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSB+ICJCb2R5LWxpa2UgZmFjdG9yIiwKICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIk1pbmQtbGlrZSBmYWN0b3IiLAogICAgZ3JlcGwoImhlYXJ0IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIkhlYXJ0LWxpa2UgZmFjdG9yIiwKICAgIFRSVUUgfiAiT3RoZXIiKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgZnVsbF9qb2luKGZhY3Rvcl9uYW1lc19jaGlsZHJlbikgJT4lCiAgICAgICAgICAgICAgcmVuYW1lX2FsbCh+cGFzdGUwKC4sICJfQiIpKSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9iaG1fQiA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpIH4gIkJvZHktbGlrZSBmYWN0b3IiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiTWluZC1saWtlIGZhY3RvciIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiSGVhcnQtbGlrZSBmYWN0b3IiLAogICAgVFJVRSB+ICJPdGhlciIpKSAlPiUKICBtdXRhdGVfYXQodmFycyhmYWN0b3JfYmhtX0EsIGZhY3Rvcl9iaG1fQiksCiAgICAgICAgICAgIH4gZmFjdG9yKC4sIGxldmVscyA9IGMoIkJvZHktbGlrZSBmYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWFydC1saWtlIGZhY3RvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmQtbGlrZSBmYWN0b3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciIpKSkgJT4lCiAgc2VsZWN0KC1jb3VudHJ5X0IsIC1hZ2VfZ3JvdXBfQikgJT4lCiAgcmVuYW1lKGNvdW50cnkgPSBjb3VudHJ5X0EsIGFnZV9ncm91cCA9IGFnZV9ncm91cF9BKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMSwgLCBpbmNsdWRlID0gRn0KZF9waGkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZmFjdG9yX2JobV9BLCAKICAgICAgICAgICAgIHkgPSByZW9yZGVyKGZhY3Rvcl9iaG1fQiwgZGVzYyhmYWN0b3JfYmhtX0IpKSwgCiAgICAgICAgICAgICBmaWxsID0gZXN0aW1hdGUpKSArCiAgZmFjZXRfZ3JpZChjb3VudHJ5IH4gYWdlX2dyb3VwLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQoZXN0aW1hdGUsIDIpLCBuc21hbGwgPSAyKSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9IHF1b3RlKHBoaSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBGfQpkX3BoaSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBmYWN0b3JfYmhtX0EsIAogICAgICAgICAgICAgY29sb3IgPSBjb3VudHJ5LAogICAgICAgICAgICAgIyBzaGFwZSA9IGFnZV9ncm91cCwKICAgICAgICAgICAgIHkgPSBlc3RpbWF0ZSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSA1LCBjb2xvciA9ICJncmF5NTAiKSArCiAgZmFjZXRfZ3JpZChhZ2VfZ3JvdXAgfiBmYWN0b3JfYmhtX0IsIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGxvd2VyLCB5bWF4ID0gdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMikgKwogICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChlc3RpbWF0ZSwgMiksIG5zbWFsbCA9IDIpKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKE5BLCAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgwLCAxLCAwLjUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9IHF1b3RlKHBoaSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjcsIGluY2x1ZGUgPSBGfQpkX3BoaSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjb3VudHJ5LCAKICAgICAgICAgICAgIGNvbG9yID0gY291bnRyeSwKICAgICAgICAgICAgIGdyb3VwID0gYWdlX2dyb3VwLCBzaGFwZSA9IGFnZV9ncm91cCwKICAgICAgICAgICAgIHkgPSBlc3RpbWF0ZSkpICsKICBmYWNldF9ncmlkKGZhY3Rvcl9iaG1fQSB+IGZhY3Rvcl9iaG1fQiwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3IgPSAiZ3JleTUwIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGxvd2VyLCB5bWF4ID0gdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogICMgZ2VvbV90ZXh0KGFlcyh5ID0gaWZlbHNlKGFnZV9ncm91cCA9PSAiYWR1bHRzIiwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGUgKyAwLjEsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGUgLSAwLjA1KSwKICAjICAgICAgICAgICAgICAgbGFiZWwgPSBmb3JtYXQocm91bmQoZXN0aW1hdGUsIDIpLCBuc21hbGwgPSAyKSksCiAgIyAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYyhOQSwgMSksIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoMCwgMSwgMC41KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSBxdW90ZShwaGkpLCAKICAgICAgIHNoYXBlID0gIkFnZSBncm91cCIsIHNpemUgPSAiQWdlIGdyb3VwIiwgCiAgICAgICBjb2xvciA9ICJTaXRlIikKYGBgCgpgYGB7cn0KY2F0KCJVUyBBRFVMVFNcbiIpCmVmYV91c19hZHVsdHMkUGhpCiMgKGVmYV91c19hZHVsdHMkUGhpKV4yCgpjYXQoIlxuVVMgQ0hJTERSRU5cbiIpCmVmYV91c19jaGlsZHJlbiRQaGkKIyAoZWZhX3VzX2NoaWxkcmVuJFBoaSleMgpgYGAKCmBgYHtyfQpjYXQoIkdIQU5BIEFEVUxUU1xuIikKZWZhX2doX2FkdWx0cyRQaGkKIyAoZWZhX2doX2FkdWx0cyRQaGkpXjIKCmNhdCgiXG5HSEFOQSBDSElMRFJFTlxuIikKZWZhX2doX2NoaWxkcmVuJFBoaQojIChlZmFfZ2hfY2hpbGRyZW4kUGhpKV4yCmBgYAoKYGBge3J9CmNhdCgiVEhBSUxBTkQgQURVTFRTXG4iKQplZmFfdGhfYWR1bHRzJFBoaQojIChlZmFfdGhfYWR1bHRzJFBoaSleMgoKY2F0KCJcblRIQUlMQU5EIENISUxEUkVOXG4iKQplZmFfdGhfY2hpbGRyZW4kUGhpCiMgKGVmYV90aF9jaGlsZHJlbiRQaGkpXjIKYGBgCgpgYGB7cn0KY2F0KCJDSElOQSBBRFVMVFNcbiIpCmVmYV9jaF9hZHVsdHMkUGhpCiMgKGVmYV9jaF9hZHVsdHMkUGhpKV4yCgpjYXQoIlxuQ0hJTkEgQ0hJTERSRU5cbiIpCmVmYV9jaF9jaGlsZHJlbiRQaGkKIyAoZWZhX2NoX2NoaWxkcmVuJFBoaSleMgpgYGAKCmBgYHtyfQpjYXQoIlZBTlVBVFUgQURVTFRTXG4iKQplZmFfdnRfYWR1bHRzJFBoaQojIChlZmFfdnRfYWR1bHRzJFBoaSleMgoKY2F0KCJcblZBTlVBVFUgQ0hJTERSRU5cbiIpCmVmYV92dF9jaGlsZHJlbiRQaGkKIyAoZWZhX3Z0X2NoaWxkcmVuJFBoaSleMgpgYGAKCgo=